sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB-uppdateringMånga med villkorlig

Du vill verkligen ha bulkWrite() med två "updateMany" uttalanden i den istället. Aggregeringsuttryck kan inte användas för att göra "alternerande val" i någon form av uppdateringssats.

db.country.bulkWrite([
  { "updateMany": {
    "filter": { "pop": { "$lt": 20000000 } },
    "update": { "$set": { "country": "Small Country" } }
  }},
  { "updateMany": {
    "filter": { "pop": { "$gt": 20000000 } },
    "update": { "$set": { "country": "Large Country" } } 
  }}
])

Det finns fortfarande en utestående "funktionsbegäran" på SERVER-6566 för "villkorlig syntax", men detta är ännu inte löst. "bulk"-API:et introducerades faktiskt efter att denna begäran väcktes, och kan verkligen anpassas som visas för att göra mer eller mindre samma sak.

Använder även $out i en aggregeringssats som annars föreslogs är inte ett alternativ att "uppdatera" och kan bara skriva till en "ny samling" för närvarande. Den planerade förändringen från MongoDB 4.2 och framåt skulle tillåta $out för att faktiskt "uppdatera" en befintlig samling, dock detta skulle bara vara där samlingen som ska uppdateras skiljer sig från alla andra samlingar som används inom insamlingen av data från aggregeringspipelinen. Så det är inte möjligt att använda en aggregeringspipeline för att uppdatera samma samling som det du läser från.

Kort sagt, använd bulkWrite() .




  1. Hur implementerar MongoDB sina rumsliga index?

  2. Mongodb Aggregation Framework:Använder $group index?

  3. Mongolastic tar lång tid att indexera en samling

  4. MongoDB Text Index på alla fält som använder Java