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

Mongoose aktualizuje mnoho s různými hodnotami podle jedinečného ID, jako je e-mail bez smyčky

Můžete použít Array.map k tvarování každého vstupu pro použití s ​​hromadným zápisem.

Zdá se, že chování, které popisujete, využívá email pole pro identifikaci každého dokumentu.

Neuvedli jste, co se má stát s ostatními poli v dokumentech. Pokud chcete nechat ostatní pole na pokoji, použijte $set pro odstranění polí, která nejsou uvedena v příchozích datech, použijte $replace .

V shellu to vypadá takto:

PRIMARY> db.users.find()
{ "_id" : 1, "email" : "[email protected]", "name" : "one" }
{ "_id" : 2, "email" : "[email protected]", "name" : "two" }
{ "_id" : 3, "email" : "[email protected]", "name" : "three" }

PRIMARY> let users = [     
  { email: "[email protected]", name: "oneeee" },       
  { email: "[email protected]", name: "twoooo" },       
  { email: "[email protected]", name: "three" },       
  { email: "[email protected]", name: "four" }   
]

PRIMARY> let bulkUpdate = db.users.initializeUnorderedBulkOp()

PRIMARY> users.forEach(u => bulkUpdate.find({email:u.email}).upsert().update({$set:u}))

PRIMARY> bulkUpdate.execute()
BulkWriteResult({
    "writeErrors" : [ ],
    "writeConcernErrors" : [ ],
    "nInserted" : 0,
    "nUpserted" : 1,
    "nMatched" : 3,
    "nModified" : 2,
    "nRemoved" : 0,
    "upserted" : [
        {
            "index" : 3,
            "_id" : ObjectId("5f5e79ff28ee536df4c4a88e")
        }
    ]
})

PRIMARY> db.users.find()
{ "_id" : 1, "email" : "[email protected]", "name" : "oneeee" }
{ "_id" : 2, "email" : "[email protected]", "name" : "twoooo" }
{ "_id" : 3, "email" : "[email protected]", "name" : "three" }
{ "_id" : ObjectId("5f5e79ff28ee536df4c4a88e"), "email" : "[email protected]", "name" : "four" }

Podívejte se na Model.bulkWrite() pro příklad, jak to udělat v mongoose.




  1. MongoDB $acosh

  2. Jak modelovat při použití Spring data mongo a Spring data elasticsearch?

  3. Jak se vyhnout tomu, aby více uzlových procesů dělalo opakující se věci?

  4. Žurnálování MongoDB:Je soubor žurnálu, který se používá, když klient požaduje zápis do žurnálu a žurnálování je aktivováno na Mongodu