arrays - 在 Mongo 中,映射数组并更新文档
问题描述
我正在尝试更新 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 并没有更新。
有什么建议我做错了吗?谢谢!
解决方案
map
是一个同步函数,你用它来进行异步更新findOneAndUpdate
,类似于混合水和油。
您需要使用async/await或Promise.all
使用 map 函数。例如,使用上面的方法,您可以使用 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)
}
})()
推荐阅读
- lisp - 在 LISP 中列出符号和 S 表达式
- css - Angular 7:ng-invalid vs :invalid
- c# - 如何根据项目中包含的 dll 或包在 .net 中创建条件指令?
- c - 使用指向字符串文字的指针数组的指针算术需要解释
- angular - 在 ngFor 中调用函数,结果将在元素中使用
- python - Python try-except-except
- node.js - Node-Red 自定义 node_modules 位置
- docker - 拒绝:请求的资源访问被拒绝 - Docker
- python - 如何在另一个函数中调用我的函数 n 次
- javascript - Vue.js 显示最近的唯一条目