sql >> Databáze >  >> NoSQL >> MongoDB

Aktualizace MongoDBMnoho s podmíněným

Opravdu chcete bulkWrite() pomocí dvou "updateMany" prohlášení v něm. Agregační výrazy nelze použít k provedení "alternativního výběru" v žádné formě příkazu aktualizace.

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

Na SERVER-6566 stále existuje nevyřízený „žádost o funkci“ pro "podmíněnou syntaxi", ale to ještě není vyřešeno. „Hromadné“ API bylo ve skutečnosti představeno po vznesení tohoto požadavku a skutečně jej lze přizpůsobit jak je znázorněno udělat více či méně to samé.

Také pomocí $out v prohlášení o agregaci, jak bylo jinak navrženo, není možnost "aktualizovat" a v současné době může psát pouze do „nové sbírky“. Očekávaná změna od MongoDB 4.2 výše by umožnila $out skutečně "aktualizovat" existující sbírku, nicméně to by bylo pouze v případě, že se kolekce, která má být aktualizována, liší od jakékoli jiné kolekce používané při shromažďování dat z agregačního kanálu. Takže to není možné pomocí agregačního kanálu k aktualizaci stejného kolekce jako to, z čeho čtete.

Stručně řečeno, použijte bulkWrite() .




  1. Chyba ServerSelectionTimeoutError při připojování k aws pomocí pymongo

  2. Odstranění klíče/hodnoty z existující položky MongoDB

  3. Nepodařilo se najít zdroj dat:com.mongodb.spark.sql.DefaultSource

  4. použijte globální proměnnou ke sdílení db mezi moduly