最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

在蒙戈,映射在阵列和更新文档

运维笔记admin8浏览0评论

在蒙戈,映射在阵列和更新文档

在蒙戈,映射在阵列和更新文档

我试图更新蒙戈多个文档。

我有一个数组,我想用这个数组特定对象更新多个蒙戈文档。

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)
    }
})()
发布评论

评论列表(0)

  1. 暂无评论