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

    Вы можете квалифицировать свое 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' .

    Interesting Posts

    Как разработать алгоритм для расчета голограммы

    Как определить тип общего поля в Java?

    Приложение типа контента / xml; charset = utf-8 ответного сообщения не соответствует типу содержимого привязки (text / xml; charset = utf-8)

    Аккуратные способы получения среды (например, версия Office)

    Как скрыть процесс в диспетчере задач на C #?

    Android: исключение из памяти в галерее

    Как провайдер определяет правильную скорость моего интернет-плана?

    Как заставить Uri.EscapeDataString соответствовать RFC 3986

    Безопасность Android SharedPreference

    В чем разница между оболочкой, консолью и терминалом?

    Не удается получить доступ к Интернету в виртуальном боксе kali

    Как найти все таблицы в MySQL с конкретными именами столбцов в них?

    Чтение текстового файла с сервера на Android

    Как использовать openURL для совершения телефонного звонка в Swift?

    Второй монитор на ноутбуке – внешний монитор продолжает действовать по-умолчанию

    Давайте будем гением компьютера.