MongoDB 仅在项目不存在时推送
MongoDB push item only if it does not exist
我有一个包含以下字段的文档:
{
"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" 或不同于 "first" 的任何其他现有 code
值,它不会添加重复字段,并且我不不明白为什么。
我也尝试过使用 $addToSet
:
db.getCollection('codes').update({ id: 15, }, { $addToSet: { existingCodes: { code: 'first' } } })
添加到集合工作正常你在匹配条件中使用 id 代替 _id
附上屏幕截图!
addToset.PNG
我有一个包含以下字段的文档:
{
"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" 或不同于 "first" 的任何其他现有 code
值,它不会添加重复字段,并且我不不明白为什么。
我也尝试过使用 $addToSet
:
db.getCollection('codes').update({ id: 15, }, { $addToSet: { existingCodes: { code: 'first' } } })
添加到集合工作正常你在匹配条件中使用 id 代替 _id 附上屏幕截图! addToset.PNG