MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB updateMany с Conditional

Вие наистина искате искате bulkWrite() използвайки две "updateMany" вместо това изявления в него. Изразите за агрегиране не могат да се използват за извършване на „алтернативен избор“ във всяка форма на израз за актуализиране.

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

Все още има неуредена „заявка за функция“ на SERVER-6566 за "условен синтаксис", но това все още не е разрешено. „Груповият“ API всъщност беше въведен след повдигането на тази заявка и наистина може да бъде адаптиран както е показано, за да направите повече или по-малко същото нещо.

Също така се използва $out в израз за агрегиране, както беше предложено иначе, не е опция за "актуализация" и в момента може да пише само в "нова колекция". Планираната промяна от MongoDB 4.2 нататък би позволила $out всъщност да "актуализирам" съществуваща колекция,обаче това би било само когато колекцията, която трябва да се актуализира, е различна от всяка друга колекция, използвана в рамките на събирането на данни от тръбопровода за агрегиране. Така че не е възможно за използване на тръбопровод за агрегиране за актуализиране на същото колекция като това, от което четете.

Накратко, използвайте bulkWrite() .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да премахна колекцията на TTL форма MongoDB?

  2. Автоматизиране и управление на MongoDB в облака

  3. Как да използвам позиционния оператор на MongoDB в C# код?

  4. СРЕДНО Качване на стекови файлове

  5. Spring Boot не може да актуализира шардирана колекция на azure cosmos db(MongoDb)