sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB-uppdatering med skick

Startar Mongo 4.2 , db.collection.update() kan acceptera en aggregeringspipeline, vilket slutligen tillåter uppdatering/skapande av ett fält baserat på ett annat fält:

// { a: "Hello", b: "World" }
// { a: "Olleh", b: "Dlrow" }
db.collection.update(
  {},
  [ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ],
  { multi: true }
)
// { a: "Hello", b: "World", active: true  }
// { a: "Olleh", b: "Dlrow", active: false }
  • Den första delen {} är matchningsfrågan som filtrerar vilka dokument som ska uppdateras (i vårt fall alla dokument).

  • Den andra delen [ { $set: { active: { $eq: [ "$a", "Hello" ] } } } ] är uppdateringsaggregationspipeline (observera att hakparenteserna anger användningen av en aggregationspipeline). $set är en ny aggregeringsoperator och ett alias för $addFields . Då kan vilken aggregeringsoperator som helst användas inom $set skede; i vårt fall en villkorad likhetskontroll som beror på vilket värde som ska användas för den nya active fältet.

  • Glöm inte { multi: true } , annars kommer bara det första matchande dokumentet att uppdateras.



  1. Installera och köra MongoDB på OSX

  2. Mongodb aggregat:konvertera datum till en annan tidszon

  3. Följare - mongodb databasdesign

  4. Hur säkerställer du att dina MongoDB-kluster kan överleva Amazon AWS-avbrott?