带有对象的Mongodb $ addToSet数组

时间:2018-03-16 20:04:42

标签: mongodb mongoose mongoose-schema

我有以下文件

{
  "_id": "A",
  "partsIds": [
    {
      "partId": "B",
      "someOtherField": "value"
    },
    {
      "partId": "C",
      "someOtherField": "value"
    }
  ]
}

现在,我尝试使用$addToSet字段值partsIdspartId数组{/ 1}}。

所以,我的工作是

collection.update({ _id: 'A' }, { $addToSet: { partsIds: { partId: 'B' } } }, {upsert: true});

此操作无论如何都会向partsIds数组添加新对象。

我想要实现的目的是找出partId === 'B'是否存在不添加任何东西,如果不存在,则将其添加到partsIds数组。

如何使用mongodb实现这一目标?

我找到了这个答案Using Mongoose / MongoDB $addToSet functionality on array of objects

但它并没有解决我的问题,因为它在与upsert一起使用时添加了一个新文档。

我接近这个以获得所需行为的方式如下,但我想知道是否有办法在mongo端一次完全执行此操作。

let doc = collection.findOne({ _id: 'A', 'partsIds.partId': 'B' });
if (!doc) {
  collection.update({ _id: 'A' }, { $push: { partsIds: { partId: 'B' } } }, { upsert: true });
}

0 个答案:

没有答案