【问题标题】:UpdateMany in mongoose not working but directly in mongodb works finemongoose 中的 UpdateMany 无法正常工作,但直接在 mongodb 中可以正常工作
【发布时间】:2019-06-17 06:17:28
【问题描述】:

我正在尝试在 mongoose 中进行更新/插入。我提出了一些要求,结果是(示例)

let obj = [
    {name: aaa,age: 10},
    {name: bbb,age: 11},
    {name: ccc,age: 12},
]

我正在尝试更新所有文档,但如果它们不存在,请创建它们。

我试过了:

updateMany({}, {$set: {nome:"obj.$.name", idade: "obj.$.age"}}, {upsert:true})

但是,什么都没有发生,我尝试在 mongoose 中进行另一个测试,更简单,如下所示:

<model-context>.updateMany({},{$set: {name: 'abc'}},{upsert: true})

没有用,所以我直接在 mongodb 中进行相同的更新

db.context.updateMany({},{$set: {name: 'abc'}},{upsert: true})

而且工作了,我需要在猫鼬中做更多的事情才能工作吗?

注意:我可以在 mongoose 中使用 createMany,效果很好。

【问题讨论】:

    标签: node.js mongodb typescript mongoose nestjs


    【解决方案1】:

    我解决了这个问题,我需要在 updateMany 的参数中传递一个函数

    for(let n of obj){
       <context>.update({name: n.name}, {$set: {'age':n.age}}, {upsert: true},  
    (err, doc)=>{
        if(err) console.log(err);
        console.log(doc)
     })
    }
    

    【讨论】:

    • 其实你放弃了updateMany。但是,如果您想返回 updateMany,请注意在使用 upsert 时需要将条件传递给条件,因为 mongoose 需要评估它是否要更新或插入。在您的第一次尝试中,您没有将条件传递给查询。
    • 您设置了标准吗?
    • 这不是批量更新,因此不会扩展。
    猜你喜欢
    • 1970-01-01
    • 2018-04-26
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 2016-09-01
    • 2020-10-20
    • 1970-01-01
    相关资源
    最近更新 更多