Pouvez-vous spécifier une clé pour $ addToSet dans Mongo?

J’ai un document:

{ 'profile_set' : [ { 'name' : 'nick', 'options' : 0 }, { 'name' : 'joe', 'options' : 2 }, { 'name' : 'burt', 'options' : 1 } ] } 

et souhaiterait append un nouveau document à l’ensemble profile_set si le nom n’existe pas déjà (quelle que soit l’option).

Donc, dans cet exemple, si j’ai essayé d’append:

{'name' : 'matt', 'options' : 0}

il faut l’append, mais en ajoutant

{'name' : 'nick', 'options' : 2}

ne devrait rien faire car un document existe déjà avec le nom nick même si l’ option est différente.

Mongo semble correspondre à l’élément entier et je me retrouve avec pour vérifier si c’est la même chose et je me retrouve avec

 profile_set containing [{'name' : 'nick', 'options' : 0}, {'name' : 'nick', 'options' : 2}] 

Est-il possible de faire cela avec $ addToSet ou dois-je pousser une autre commande?

    Vous pouvez qualifier votre update à update avec un object de requête qui empêche la mise à jour si le name est déjà présent dans profile_set . Dans la coquille:

     db.coll.update( {_id: id, 'profile_set.name': {$ne: 'nick'}}, {$push: {profile_set: {'name': 'nick', 'options': 2}}}) 

    Donc, cela ne fera qu’exécuter $push pour un document avec un _id correspondant et où il n’y a pas d’élément profile_setname est 'nick' .