我有以下数据:
{
title: "whatever"
answers:[
{
"question_id" : 11294,
"sub_id" : null,
"_id" : ObjectId("52f90f68bab16dd8595d453e"),
"values" : [
"Po "
]
}
]
}
我正在尝试更新它:
db.participants.update(
{
"answers.question_id": 11294,
"answers.sub_id": null
},
{
$set:
{
"answers.$.question": 'test'
}
},
false,
true
);
但它不起作用(记录未更新)。如果有sub_id
和answers.sub_id
的值,则更新正常。如何编写此更新,以便当它们具有answers.sub_id
的值且answers.sub_id
为空时,它将更新记录?
更新:
我在运行查询之前创建了这个索引,然后在以下后删除它:
db.participants.ensureIndex({"answers.question_id": 1, "answers.sub_id": 1});
答案 0 :(得分:1)
您应该尝试$elemMatch:
db.participants.update(
{
answers: {$elemMatch: {"question_id": 11294, "sub_id": null}}
},
{
$set:
{
"answers.$.question": 'test'
}
},
false,
true
);
“答案”字段是一个数组,在您的示例中,不是子文档。希望这会有所帮助。