【发布时间】:2020-06-17 02:27:14
【问题描述】:
我有这两个基本结构相同的子文档。这些文档中的每一个都包含一个名为 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 }]
}
}))
它不起作用我得到一个读数,显示它找到了匹配的文档,但没有修改任何文档。
如果我去掉列表过滤器并使用通配符 $[],它会修改文档,但会为所有不正确的 AdditionalLabor 项目设置相同的时间表。我已经盯着这段代码看了一段时间,我不知道为什么它不起作用。请帮忙!
【问题讨论】:
-
你的语法是正确的,猫鼬在 5.4 上有一个长期存在的错误,
arrayfilters。 -
感谢您的回复。尽管这并不令人欣慰。我是 SOL 吗?
-
还不错,我刚刚降级到 5.3,它为我解决了这个问题。
-
这有帮助。我能够问一个更好的问题并找到了这个。 (stackoverflow.com/questions/48215167/…)
-
再次感谢,救命稻草。