Я хочу обновить несколько документов.
Мой текущий документ,
Документ Аккаунт

{
    "_id" : "5cbd96aca1a6363473d4g8745",
    "contact" : [
         "5cbd96aca1a6363473d4a968",
    ]
},
{
    "_id" : "5cbd96aca1a6363473d4g8746",
    "contact" : [             
         "5cbd96aca1a6363473d4z7632",
    ]
}

Мне нужно ниже вывода,
обновить массив контактов с помощью другого _id .
Документ Аккаунт

{
    "_id" : "5cbd96aca1a6363473d4g8745",
    "contact" : [
         "5c98833f98770728a7047f1a",
         "5cbd96aca1a6363473d4a968",
    ]
},
{
    "_id" : "5cbd96aca1a6363473d4g8746",
    "contact" : [     
         "5caddf78b8c0645402090536",        
         "5cbd96aca1a6363473d4z763",
    ]
}
1
Manoj Ghediya 3 Май 2019 в 08:08

3 ответа

Лучший ответ

Используйте $addToSet или $push, чтобы отправить идентификатор с bulk update.

2
Abhishek Mani 3 Май 2019 в 05:43

Вы можете использовать обновление с upsert. Он обновит документ, если он существует, а если нет, то создаст новый. например:

//Make a obj to set
var contacts = {
  id: req.body.id,
  contactIds: req.body.contactIds,
};

req.app.db.models.ModelsName.update(
{
//if you want multiple fields to be update
  $and: [{ id: contacts.id }, { contactIds: { $in: contacts.contactIds } }]
},

//Set the above obj 
{ $set: contacts },
{ upsert: true },
(err, result) => {
  if (err) {
    console.log(err.message)
  }
  console.log("Updated successfully")
})

Это просто ссылка. Измените соответственно ваше использование.

2
Sumit Yadav 3 Май 2019 в 06:02

Вы можете использовать метод Bulk.find.update () для обновления всех соответствующих документов. пример: var bulk = db.items.initializeUnorderedBulkOp (); bulk.find ({status: "D"}) .update ({$ set: {status: "I", points: "0"}}); bulk.find ({item: null}) .update ({$ set: {item: "TBD"}}); bulk.execute ( ) ;

0
Ravikiran Gambhire 3 Май 2019 в 05:19