У меня есть документ со следующими полями:
{
"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' } } })