我正在尝试在mongo中更新多个文档。
我有一个数组,我想用该数组中的特定对象更新多个mongo文档。
let items = [{ order: 0 }, { order: 1 }, { order: 2 }]
我已经尝试过此操作来更新mongo:
items.map((item) => {
db.items.findOneAndUpdate(
{ _id: item._id },
{ $set: { order: item.order } }
)
})
如果我检查项目,它实际上已经更新了数组:
console.log(items)
但是当我查看数据库时,MongoDB尚未更新。
有人建议我在做什么错吗? 谢谢!
答案 0 :(得分:0)
map
是一个同步功能,您正在使用它与findOneAndUpdate
进行异步更新,类似于将水和油混合在一起。
您需要在地图功能中使用async/await或Promise.all
。例如,使用上述方法,您可以使用map函数创建一个promise数组,并使用Promise.all
const updatePromises = items.map(({ _id, order }) => (
Item.findOneAndUpdate({ _id }, {'$set': { order } })
))
Promise.all(updatePromises).then(console.log).catch(console.error)
使用异步/等待
(async () => {
try {
for(let i=0; i<items.length; i++) {
await Item.findOneAndUpdate(
{ _id: item._id },
{ $set: { order: item.order } }
)
}
} catch (err) {
console.error(err)
}
})()