Mongodb Обновить несколько документов, вставить, если не существует - PullRequest
0 голосов
/ 26 января 2019

Если установлено upsert: true, тогда mongodb вставит новый документ, если существует. Мой запрос ниже работает нормально для одного документа. Индекс уникальности: - {fid: 1, uniqueid: 1, atype: 1, ftype: 1}

db.Notification.updateMany(
  {fid : 103,uniqueid:1001,atype:1,ftype:6}
  ,{ $set: { epoch: 1548484978658,actionbyuserid: 110, title: 'Good Morning To All'}}
  ,{upsert:true}
);

Но при выполнении запроса ниже не добавляются новые документы для несопоставленных документов;

db.Notification.updateMany(
 {fid : {$in:[101,102,103]},uniqueid:1001,atype:1,ftype:6}
  ,{ $set: { epoch: 1548484978658,actionbyuserid: 110, title: 'Good Morning To All'}}
,{upsert:true}
)

Есть ли другие, чтобы проверить и вставить не найденные документы?

1 Ответ

0 голосов
/ 26 января 2019

Вы можете использовать bulkWrite операция

Массив, который вы хотите обновить с помощью

const array = [101, 102, 103]

Запрос на массовое обновление

Model.bulkWrite(
  array.map((val) => 
    ({
      updateOne: {
        filter: { _id: val, uniqueid: 1001, atype: 1, ftype: 6 },
        update: { $set: { epoch: 1548484978658, actionbyuserid: 110, title: 'Good Morning To All'} },
        upsert: true
      }
    })
  )
})
...