为什么这不会为我插入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个文档,而是插入了一个文档。
答案 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' } } }
])
通过对服务器的单个响应高效地执行所有更新。