我有一个products集合,其中某些产品具有以下结构:

{
_id: anID
shops:
[
  {
    _id : shopId,
    price: productsPrice
  },
  ...
]
}


我想更新给定产品和商店的价格,但是如果阵列中不存在该商店,请用他的价格插入该商店。

我是MongoDB的初学者。使用Node.Js / express(mongoDB驱动程序),但不使用猫鼬。

提前致谢

最佳答案

您可以尝试.bulkWrite()-这将推送一个新的shop对象或更新现有的对象:

var inputObj = { "_id": anShopID, "price": someValue }
db.collection.bulkWrite([{
    updateOne: {
        "filter": { "_id": anID, "shops._id": inputObj._id },
        "update": { $set: { "shops.$.price": inputObj.price } }
    }
}, {
    updateOne: {
        "filter": { "_id": anID, "shops._id": { $ne: inputObj._id } },
        "update": { $push: { "shops": inputObj } }
    }
}])

10-07 20:57