Можете ли вы указать ключ для $addToSet в Монго?
У меня есть документ:
{ 'profile_set' :
[
{ 'name' : 'nick', 'options' : 0 },
{ 'name' : 'joe', 'options' : 2 },
{ 'name' : 'burt', 'options' : 1 }
]
}
и хотел бы добавить новый файл к набору profile_set, если имя еще не существует (независимо от опции).
Итак, в этом примере, если я попытался добавить:
{'name' : 'matt', 'options' : 0}
он должен добавить его, но добавив
{'name' : 'nick', 'options' : 2}
ничего не должен делать, потому что документ уже существует с именем nick
, хотя option
отличается.
Монго, похоже, соответствует всему элементу, и я заканчиваю тем, чтобы проверить, совпадает ли он с этим, и я заканчиваю тем, что
profile_set containing [{'name' : 'nick', 'options' : 0}, {'name' : 'nick', 'options' : 2}]
Есть ли способ сделать это с помощью $addToSet или мне нужно нажать еще одну команду?
Ответы
Ответ 1
Вы можете определить свой update
объект запроса, который предотвращает обновление, если name
уже присутствует в profile_set
. В оболочке:
db.coll.update(
{_id: id, 'profile_set.name': {$ne: 'nick'}},
{$push: {profile_set: {'name': 'nick', 'options': 2}}})
Таким образом, это будет выполнять только $push
для документа с подходящим _id
и где не существует элемента profile_set
, где name
есть 'nick'
.