我有以下文件
{
"_id": "A",
"partsIds": [
{
"partId": "B",
"someOtherField": "value"
},
{
"partId": "C",
"someOtherField": "value"
}
]
}
现在,我尝试使用$addToSet
字段值partsIds
到partId
数组{/ 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 });
}