Можете ли вы указать ключ для $addToSet в Монго? - программирование
Подтвердить что ты не робот

Можете ли вы указать ключ для $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 или мне нужно нажать еще одну команду?

4b9b3361

Ответ 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'.