在蒙戈,映射在阵列和更新文档
我试图更新蒙戈多个文档。
我有一个数组,我想用这个数组特定对象更新多个蒙戈文档。
let items = [{ order: 0 }, { order: 1 }, { order: 2 }]
我曾尝试这个更新蒙戈:
items.map((item) => {
db.items.findOneAndUpdate(
{ _id: item._id },
{ $set: { order: item.order } }
)
})
如果我检查的项目,它实际上已经更新了阵列:
console.log(items)
但是,当我看着我的数据库中,MongoDB中还没有更新。
任何建议我做错了什么?谢谢!
回答如下:map
是同步功能并且正在使用它来与findOneAndUpdate
异步更新,类似于混合水和油。
你要么需要使用async/await或Promise.all
与地图功能。例如,对于上述情况,你可以创建与地图功能的承诺的数组,并与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)
}
})()
在蒙戈,映射在阵列和更新文档
我试图更新蒙戈多个文档。
我有一个数组,我想用这个数组特定对象更新多个蒙戈文档。
let items = [{ order: 0 }, { order: 1 }, { order: 2 }]
我曾尝试这个更新蒙戈:
items.map((item) => {
db.items.findOneAndUpdate(
{ _id: item._id },
{ $set: { order: item.order } }
)
})
如果我检查的项目,它实际上已经更新了阵列:
console.log(items)
但是,当我看着我的数据库中,MongoDB中还没有更新。
任何建议我做错了什么?谢谢!
回答如下:map
是同步功能并且正在使用它来与findOneAndUpdate
异步更新,类似于混合水和油。
你要么需要使用async/await或Promise.all
与地图功能。例如,对于上述情况,你可以创建与地图功能的承诺的数组,并与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)
}
})()