使用for循环猫鼬批量插入文档

时间:2018-07-08 05:39:07

标签: node.js mongoose

为什么这不会为我插入20个文档?

for (let i = 0; i <= 20; i++) {
  const [updated] = await Promise.all([
    Job.findOneAndUpdate(
      { _id: id },
      {
        $set: {
          status: 'something'
        }
      },
      { upsert: true, new: true }
    ),
    User.findOneAndUpdate(
      { _id: userId },
      {
        $set: { assigned: true }
      },
      { upsert: true, new: true }
    )
  ])
}

还是我应该使用reduce和Promise解决?上面的查询只是没有插入20个文档,而是插入了一个文档。

1 个答案:

答案 0 :(得分:0)

如果您有id的数组,则可以使用bulkWrite

const id = ['844646464', '45646546546', '45646546546']

Model.bulkWrite(
  req.body.idArray((id) => {
    return ({
      updateOne: {
        filter: { _id: id },
        update: { $set: { status: 'something' } },
        upsert: true
      }
    })
  })
})

它将创建类似这样的请求

bulkWrite([
   { updateOne: { filter: { _id: id }, update: { $set: { status: 'something' } } },
   { updateOne: { filter: { _id: id }, update: { $set: { status: 'something' } } },
   { updateOne: { filter: { _id: id }, update: { $set: { status: 'something' } } } 
])

通过对服务器的单个响应高效地执行所有更新。