Vous devez utiliser le $ne
opérateur.
var data = { 'kind': 'tortoise', 'hashtag': 'foo' };
Model.update(
{ 'articles.hashtag': { '$ne': 'foo' } },
{ '$addToSet': { 'articles': data } }
)
Cela mettra à jour le document uniquement s'il n'y a pas de sous-document dans le tableau "article" avec la valeur du hashtag égale à "foo".
Comme @BlakesSeven l'a mentionné dans le commentaire
Le
$addToSet
devient sans objet une fois que vous testez la présence de l'une des valeurs, cela peut donc aussi bien être un$push
pour la clarté du code. Mais le principe est correct puisque$addToSet
fonctionne sur l'ensemble de l'objet et pas seulement sur une partie de celui-ci.
Model.update({
{ 'articles.hashtag': { '$ne': 'foo' } },
{ '$push': {'articles': data } }
)