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 中使用 update many 来循环遍历 8 个元素并将它们放入该模式中的数组中
Mongoose 报错代码 (node:10256)(node:13604)(node:13604) DeprecationWarning: Mongoose: findOneAndUpdate()