sql >> Databasteknik >  >> NoSQL >> MongoDB

Uppdatera element i array om det finns annat infoga nytt element i den arrayen i MongoDb

Använd $addToSet istället för $push .

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

EDIT:

Det finns inget enkelt inbyggt tillvägagångssätt för villkorlig uppdatering av underdokument i ett matrisfält, efter specifik egenskap. Ett litet knep kan dock göra jobbet genom att utföra två kommandon i följd.

Till exempel:Om vi ​​vill uppdatera quizzes fält med objektet { "wk": 7.0, "score": 8.0 } , vi kan göra det i två steg:

Steg-1: $pull ut underdokument från quizzes array där "wk": 7.0 . (Inget händer om matchande underdokument inte hittas ).

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

Steg-2: $addToSet underdokumentet.

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

Du kan kombinera ovanstående två uppdateringskommandon med bulk.find().update()



  1. Antalet utgående nycklar listade av infokommandot på redis-slaven överensstämmer inte med vad jag ser

  2. MySQL till MongoDB - Ett Admin-fuskblad

  3. Hur exporterar man samling till CSV i MongoDB?

  4. Hur får man, uppdaterar alla nycklar och dess värden från redis-databasen i c#?