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

Mettre à jour l'élément dans le tableau s'il existe, sinon insérer un nouvel élément dans ce tableau dans MongoDb

Utilisez $addToSet au lieu de $push .

db.push.update(
    { _id: 5 },
    { $addToSet: { "quizzes": {"wk": 6.0, "score": 8.0}, "play": {"wk": 6.0, "score": 8.0} } }
)

MODIF :

Il n'existe pas d'approche intégrée simple pour la mise à jour conditionnelle des sous-documents dans un champ de tableau, par propriété spécifique. Cependant, une petite astuce peut faire l'affaire en exécutant deux commandes en séquence.

Par exemple :Si nous voulons mettre à jour les quizzes champ avec l'objet { "wk": 7.0, "score": 8.0 } , nous pouvons le faire en deux étapes :

Étape 1 : $pull sortir des sous-documents des quizzes tableau où "wk": 7.0 . (Rien ne se passe si le sous-document correspondant est introuvable ).

db.push.update(
    { _id: 5 },
    { $pull: { "quizzes": { "wk": 7.0 } } }
)

Étape 2 : $addToSet le sous-document.

db.push.update(
    { _id: 5 },
    { $addToSet: { "quizzes": {"wk": 7.0, "score": 8.0} } }
)

Vous pouvez combiner les deux commandes de mise à jour ci-dessus en utilisant le bulk.find().update()