我有一个包含以下字段的文档:
{
"id" : 15,
"existingCodes" : [
{
"_id" : ObjectId("5c49a6c03a95f50b15409296"),
"code" : "first"
},
{
"_id" : ObjectId("5c49a6c03a95f50b15409295"),
"code" : "second"
},
{
"_id" : ObjectId("5c49a6c03a95f50b15409294"),
"code" : "third"
},
{
"_id" : ObjectId("5c49a6c03a95f50b15409293"),
"code" : "fourth"
}
]
}
问题是我正在尝试将一个新对象推送到existingCodes
数组,但确保code
值尚不存在,并且我尝试过的每个解决方案都不起作用。
我试图使用$push
和$ne
实现这一点,但它添加了重复的字段:
db.getCollection('codes').update({ id: 15, 'existingCodes.code': { $ne: 'first' } }, { $push: { existingCodes: { code: 'first' } } })
但是如果我改变$ne
以匹配“second”或任何其他现有的code
值不同于“first”,它不会添加重复字段,我不明白为什么。
我也尝试过使用$addToSet
:
db.getCollection('codes').update({ id: 15, }, { $addToSet: { existingCodes: { code: 'first' } } })
添加到设置工作正常你在匹配条件中使用id代替_id附加截图! addToset.PNG