MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Aktualizacja MongooseWiele z różnymi wartościami według unikalnego identyfikatora, takiego jak e-mail bez pętli

Możesz użyć Array.map do ukształtowania każdego wejścia do użytku z masowym zapisem.

Wygląda na to, że zachowanie, które opisujesz, używa email pole do identyfikacji każdego dokumentu.

Nie wskazałeś, co powinno się stać z innymi polami w dokumentach. Jeśli chcesz zostawić inne pola w spokoju, użyj $set aby usunąć wszystkie pola niewymienione w przychodzących danych, użyj $replace .

W powłoce wygląda to tak:

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

Spójrz na Model.bulkWrite() na przykład, jak to zrobić w manguście.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Błąd podczas pobierania tweetów za pomocą Tweepy

  2. Potrzebujesz obejścia dla wyszukiwania ciągu do objectID outsideField

  3. mongodb count liczba odrębnych wartości na pole/klucz

  4. Mongo:zapytanie według klucza o jeden poziom głębokości

  5. sterownik java mongodb - surowe polecenie?