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

Aggiorna l'elemento nell'array se esiste, altrimenti inserisci un nuovo elemento in quell'array in MongoDb

Usa $addToSet invece di $push .

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

MODIFICA:

Non esiste un approccio integrato semplice per l'aggiornamento condizionale di documenti secondari in un campo matrice, in base a una proprietà specifica. Tuttavia, un piccolo trucco può fare il lavoro eseguendo due comandi in sequenza.

Ad esempio:se vogliamo aggiornare i quizzes campo con l'oggetto { "wk": 7.0, "score": 8.0 } , possiamo farlo in due passaggi:

Passaggio-1: $pull fuori documenti secondari dai quizzes array dove "wk": 7.0 . (Non succede nulla se il documento secondario corrispondente non viene trovato ).

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

Passaggio-2: $addToSet il documento secondario.

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

Puoi combinare i due comandi di aggiornamento precedenti usando bulk.find().update()