sql >> Database >  >> NoSQL >> MongoDB

MongoDB updateMany met voorwaardelijk

Je wilt echt bulkWrite() met behulp van twee "updateMany" in plaats daarvan uitspraken. Aggregatie-expressies kunnen niet worden gebruikt om "alternatieve selectie" uit te voeren in enige vorm van update-instructie.

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

Er is nog steeds een openstaand "functieverzoek" op SERVER-6566 voor "voorwaardelijke syntaxis", maar dit is nog niet opgelost. De "bulk" API is eigenlijk geïntroduceerd nadat dit verzoek was ingediend, en kan echt aangepast worden zoals getoond om min of meer te doen hetzelfde.

Gebruikt ook $out in een aggregatieverklaring, zoals anders werd gesuggereerd, is geen optie om "bij te werken" en kan momenteel alleen naar een "nieuwe verzameling" schrijven. De geplande wijziging vanaf MongoDB 4.2 zou $out om daadwerkelijk te "bijwerken" een bestaande verzameling, echter dit zou alleen het geval zijn wanneer de verzameling die moet worden bijgewerkt, verschilt van elke andere verzameling die wordt gebruikt bij het verzamelen van gegevens uit de aggregatiepijplijn. Het is dus niet mogelijk om een ​​aggregatiepijplijn te gebruiken om de dezelfde . bij te werken collectie als waaruit u leest.

Kortom, gebruik bulkWrite() .




  1. hoe kan ik zoeken naar tekst in een array in mongodb

  2. Hoe het BSON-type van het Rust Mongo-stuurprogramma naar ObjectId te converteren?

  3. Spring Mongo DB @DBREF

  4. Is er een limiet op het aantal argumenten dat redis-commando's zoals ZADD of HMGET aankunnen?