首页 > 解决方案 > bulkWrite - 类型错误:无法在 applyTimestampsToUpdate 的数字 '0' 上创建属性 '$set' - mongoose 或 mongodb

问题描述

我尝试使用bulkWrite查询一次更新多个不同的文档,客户在更新产品数量详细信息时订购了多个产品。我找到了 bulkWrite updateOne查询。此批量数组一次更新。

代码 :

同时更新键值 update: { $set: { 'colorName' : null} }工作正常。但使用嵌套数组键值update: { $set: { 'sizes.$.qty' : data.qty} }不起作用。

poductModel.bulkWrite(arrayValue.map((data) => ({
            updateOne: {
          filter: { _id: data.productQtyDetailsId, 'sizes.name' : data.sizeName },

          update: { $set: { 'sizes.$.qty' : data.qty} } 
      //working fine
      //update: { $set: { 'colorName' : null} } 

        }
      }))).then(err,result => {

      })

JSON数据:

    [
  {
    "qty": 8,
    "productId": "5d31567ea23d120f087a9aaf",
    "productQtyDetailsId": "5d316373b356873504e78be7",
    "sizeName": "4",
    "colorName": "green",
  },
  {
    "qty": 5,
    "productId": "5d31567ea23d120f087a9aaf",
    "productQtyDetailsId": "5d31567ea23d120f087a9ab1",
    "sizeName": "4",
    "colorName": "blue",
  }
]

蒙戈数据库数据:

[
{
    "_id" : ObjectId("5d316373b356873504e78be7"),
    "colorName" : "green",
    "productId" : ObjectId("5d31567ea23d120f087a9aaf"),
    "sizes" : [ 
        {
            "name" : "4",
            "qty" : 5.0,
            "price" : 1500.0
        }, 
        {
            "name" : "5",
            "qty" : 6.0,
            "price" : 1600.0
        }, 
        {
            "name" : "6",
            "qty" : 7.0,
            "price" : 1700.0
        }
    ]
}

{
    "_id" : ObjectId("5d31567ea23d120f087a9ab1"),
    "colorName" : "blue",
    "productId" : ObjectId("5d31567ea23d120f087a9aaf"),
    "sizes" : [ 
        {
            "name" : "4",
            "qty" : 5.0,
            "price" : 1500.0
        }, 
        {
            "name" : "5",
            "qty" : 6.0,
            "price" : 1600.0
        }, 
        {
            "name" : "6",
            "qty" : 7.0,
            "price" : 1700.0
        }
    ]
},
...
]

标签: node.jsmongodbmongoosemongodb-querybulkupdate

解决方案


我在尝试更新模型模式中不存在的字段时遇到了同样的错误。

该问题可以通过使用<model>.collection.bulkWrite或将字段添加到架构来解决(至少这两个操作在我的情况下都有效)。


推荐阅读