仅当MongoDB推送项目不存在时

时间:2019-02-19 10:32:22

标签: mongodb push updating

我有一个包含以下字段的文档:

{
    "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更改为匹配“第二”或任何其他不同于“第一”的现有code值,它不会添加重复字段,而且我也不明白为什么。 / p>

我也尝试使用$addToSet

db.getCollection('codes').update({ id: 15, }, { $addToSet: { existingCodes: { code: 'first' } } })

1 个答案:

答案 0 :(得分:2)

如果您在匹配条件中使用 id 代替 _id

添加到设置效果很好 并附上截图! addToset.PNG