mongoose 中的 UpdateMany 无法正常工作,但直接在 mongodb 中可以正常工作

Posted

技术标签:

【中文标题】mongoose 中的 UpdateMany 无法正常工作,但直接在 mongodb 中可以正常工作【英文标题】:UpdateMany in mongoose not working but directly in mongodb works fine 【发布时间】: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,效果很好。

【问题讨论】:

【参考方案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 需要评估它是否要更新或插入。在您的第一次尝试中,您没有将条件传递给查询。 您设置了标准吗? 这不是批量更新,因此不会扩展。

以上是关于mongoose 中的 UpdateMany 无法正常工作,但直接在 mongodb 中可以正常工作的主要内容,如果未能解决你的问题,请参考以下文章

返回未更新的搜索值列表(Mongoose、updateMany)

具有多个条件的 Mongoose updateMany() 返回 0

Mongoose 更新或插入许多文档

如何在 mongoose 中使用 update many 来循环遍历 8 个元素并将它们放入该模式中的数组中

在mongoose中更新许多[重复]

Mongoose 报错代码 (node:10256)(node:13604)(node:13604) DeprecationWarning: Mongoose: findOneAndUpdate()