sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongoose-uppdateringMånga med olika värden genom unikt ID som e-post utan loop

Du kan använda Array.map för att forma varje indata för användning med en bulkskrivning.

Beteendet du beskriver verkar använda email för att identifiera varje dokument.

Du angav inte vad som skulle hända med andra fält i dokumenten. Om du vill lämna andra fält ifred, använd $set för att ta bort fält som inte nämns i inkommande data, använd $replace .

I skalet ser det ut så här:

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" }

Ta en titt på Model.bulkWrite() för ett exempel på hur man gör detta i mongoose.




  1. Mongoose underdokument vs kapslade schema

  2. MapReduce i PyMongo

  3. Sortering i MongoDB med elemMatch

  4. Kan MongoDB lagra och manipulera strängar av UTF-8 med kodpunkter utanför det grundläggande flerspråkiga planet?