MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Utilisation de la fonctionnalité Mongoose / MongoDB $addToSet sur un tableau d'objets

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 } }
)