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