sql >> Database teknologi >  >> NoSQL >> MongoDB

Opdater element i array, hvis der findes andet, indsæt nyt element i det array i MongoDb

Brug $addToSet i stedet for $push .

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

EDIT:

Der er ingen enkel indbygget tilgang til betinget underdokumentopdatering i et array-felt efter specifik egenskab. Et lille trick kan dog gøre jobbet ved at udføre to kommandoer i rækkefølge.

For eksempel:Hvis vi ønsker at opdatere quizzes felt med objektet { "wk": 7.0, "score": 8.0 } , vi kan gøre det i to trin:

Trin-1: $pull ud af underdokumenter fra quizzes array hvor "wk": 7.0 . (Der sker ikke noget, hvis det matchende underdokument ikke findes ).

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

Trin-2: $addToSet underdokumentet.

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

Du kan kombinere ovenstående to opdateringskommandoer ved at bruge bulk.find().update()



  1. Hvordan forespørger man mongodb med "synes godt om" ved hjælp af java api?

  2. Hvornår skal du Redis? Hvornår skal MongoDB?

  3. MongoDB findOneAndUpdate()

  4. Hvordan opretter man en model i DRY-mønster ved hjælp af flow.js (til asynkrone opkald) i node.js?