J'ai un document:
{ 'profile_set' :
[
{ 'name' : 'nick', 'options' : 0 },
{ 'name' : 'joe', 'options' : 2 },
{ 'name' : 'burt', 'options' : 1 }
]
}
et souhaite ajouter 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'ajouter:
{'name' : 'matt', 'options' : 0}
il faut l'ajouter, mais en ajoutant
{'name' : 'nick', 'options' : 2}
ne devrait rien faire car un document existe déjà avec le nom nick
même si le option
est différent.
Mongo semble correspondre à l'ensemble de l'élément 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}]
Existe-t-il un moyen de le faire avec $ addToSet ou dois-je pousser une autre commande?
Vous pouvez qualifier votre update
avec un objet de requête qui empêche la mise à jour si le name
est déjà présent dans profile_set
. Dans le Shell:
db.coll.update(
{_id: id, 'profile_set.name': {$ne: 'nick'}},
{$Push: {profile_set: {'name': 'nick', 'options': 2}}})
Donc, cela ne fera que le $Push
pour un document avec une correspondance _id
et où il n'y a pas de profile_set
élément où name
est 'nick'
.