按子文档按多个ID查找并更新其数据。 下面的示例说明按grade.id查找数据并将其对应的平均值更新为100。
MongoDB版本:3.4和3.6
按子文档更新子文档ID - 子文档ID数组
架构:
{
"_id" : 1,
"grades" : [
{
"id" : 1,
"grade" : 80,
"mean" : 75,
"std" : 6
},
{
"id" : 2,
"grade" : 85,
"mean" : 90,
"std" : 4
},
{
"id" : 3,
"grade" : 85,
"mean" : 85,
"std" : 6
}
]
}
查询:
db.students.update(
{_id: 1},
{ $set: { "grades.$[elem].mean" : 100 } },
{
multi: true,
arrayFilters: [ { "elem._id": { $in: [1, 2] } } ]
}
)
输出
{
"_id" : 1,
"grades" : [
{
"id" : 1,
"grade" : 100,
"mean" : 75,
"std" : 6
},
{
"id" : 2,
"grade" : 100,
"mean" : 90,
"std" : 4
},
{
"id" : 3,
"grade" : 85,
"mean" : 85,
"std" : 6
}
]
}
我已尝试过上述查询,但失败
错误 无法使用该部分(成绩等级。$ [elem] .mean)遍历元素
答案 0 :(得分:1)
针对v3.4运行此查询无法正常工作,因为它根本不支持这种新的数组过滤功能。因此,您必须针对v3.6运行查询。
然后你可能会遇到以下两个问题:
您的arrayFilters: [ { "elem._id": { $in: [1, 2] } } ]
应引用正确的字段名称,该字段名称仅为"elem.id"
(不带下划线)。
您可能正在使用Robomongo(或类似)作为客户端来运行查询。我不知道这里发生了什么,但这根本不起作用。一旦您使用Mongo shell,一切都按预期工作。