sql >> Database >  >> NoSQL >> MongoDB

Mongoose-updateVeel met verschillende waarden op unieke id zoals e-mail zonder lus

Je zou Array.map kunnen gebruiken om elke invoer vorm te geven voor gebruik met een bulkschrijfopdracht.

Het gedrag dat je beschrijft lijkt gebruik te maken van de email veld om elk document te identificeren.

U heeft niet aangegeven wat er met andere velden in de documenten moet gebeuren. Als je andere velden alleen wilt laten, gebruik dan $set gebruik $replace . om velden te verwijderen die niet in de inkomende gegevens worden vermeld .

In de shell ziet dit er als volgt uit:

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

Bekijk Model.bulkWrite() voor een voorbeeld van hoe dit te doen in mangoest.




  1. mongolastic duurt lang om een ​​collectie te indexeren

  2. Zoeken in waarden van een redis db

  3. Resque op Heroku cedar stack Het aantal arbeiders bestaat nog nadat de arbeider is beëindigd

  4. Zoek er een of maak met Mongoose