gpt4 book ai didi

node.js - 由于某种原因,bulkWrite 和 arrayFilter 没有修改文档。 MongoDB 和 Mongoose

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:09 26 4
gpt4 key购买 nike

我有这两个子文档,它们的结构基本相同。每个文档都包含一个名为 scheduleInfo 的对象数组。该数组的结构如下。

设备列表

scheduleInfo: [{month: String, hours: Number, frequency: String, equipId: String, uniqId: String}]

额外人工

scheduleInfo: [{month: String, hours: Number, frequency: String, addLaborId: String, uniqId: String}]

这是我用来将对象添加到 equipmentList 中的 scheduleInfo 的代码

 OpportunityModel.bulkWrite(
equipSch.map(d => ({
updateOne: {
filter: { sfOppId: oppId },
update: {
$set: { "equipmentList.$[e].scheduleInfo": d.equipSch }
},
upsert: true,
arrayFilters: [{ "e.sfEquipId": d.equipId }]
}
}))
)

这段代码执行正确。由于additionalLabor中的scheduleInfo本质上是相同的东西,所以这是我用来将对象添加到additionalLabor

中的 scheduleInfo的代码
 OpportunityModel.bulkWrite(
additionalLaborSch.map(d => ({
updateOne: {
filter: { sfOppId: oppId },
update: {
$set: { "additionalLaborCostInfo.$[e].scheduleInfo": d.schedule }
},
upsert: true,
arrayFilters: [{ "e._id": d.addLaborId }]
}
}))

它不起作用我得到一个读数,显示它找到了匹配的文档,但没有修改任何文档。

如果我去掉列表过滤器并使用通配符 $[] ,它会修改文档,但为所有附加劳动力项目设置相同的时间表,这是不正确的。我已经盯着这段代码有一段时间了,我不知道为什么它不起作用。请帮忙!

最佳答案

感谢 Tom ( https://stackoverflow.com/users/10770370/tom-slabbaert)and actraiser ( https://stackoverflow.com/users/2340924/actraiser ),我找到了解决方案。将 extraLabor 的 arrayFilters 更改为

arrayFilters: [{ "e._id": mongoose.Types.ObjectId(d.addLaborId) }]

有效。

关于node.js - 由于某种原因,bulkWrite 和 arrayFilter 没有修改文档。 MongoDB 和 Mongoose ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60528711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com