数据。
{
"_id" : ObjectId("5aab67d9a0f7ef2e24860d09"),
"Name" : "Raj",
"status" : "pass",
"marks" : [
{
"M" : 95,
"E" : 75,
"H" : 60.0,
"s" : "p"
},
{
"M" : 56,
"E" : 45,
"H" : 60.0,
"s" : "p"
}
]
}
{
"_id" : ObjectId("5aab689ea0f7ef2e24860d0b"),
"Name" : "Amit",
"status" : "Fail",
"marks" : [
{
"M" : 95,
"E" : 75,
"H" : 55,
"s" : "p"
},
{
"M" : 56,
"E" : 30,
"H" : 95,
"s" : "f"
}
]
}
这是我在mongoDb中的集合结构
我想更新"状态"具有第二个对象值的字段" marks.s" 我试过了
db.getCollection('test').updateMany(
{ $set : {"status" : "marks.1.s" } }
)
错误
Error:
TypeError:无法将undefined转换为object: DBCollection.prototype.updateMany@src/mongo/shell/crud_api.js:594:16 @(壳):1:1
答案 0 :(得分:0)
这将更新整个集合,从第二个位置获取s的值并在文档的status字段中进行设置。
db.test.aggregate([
{ "$addFields": { "status": {$arrayElemAt:[ "$marks.s",1]} }} ,
{ "$out": "test" }
]);
答案 1 :(得分:0)
这对我来说很好:
db.test.find().snapshot().forEach(function (item)
{db.test.update({_id: item._id},{$set: {status: item.marks[1].s}})});
遍历整个集合,并为每个项目用其标记值替换状态值。