MongoDB push-элемент, только если он не существует - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть документ со следующими полями:

{
    "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, отличное от «первого», и я не понимаю, почему.

Я также пытался использовать $addToSet:

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

1 Ответ

0 голосов
/ 19 февраля 2019

Добавить, чтобы установить отлично работает, вы используете id в условии соответствия вместо _id , также прикрепляя скриншот! addToset.PNG

...