我有一系列这样的文件:
activity: [{
"_id" : "0000a021d96b12e37828db6a583a9632",
"user_guid" : "86f8dff81756ec760b9082d77753e51d",
"start_date" : ISODate("2017-02-04T00:00:00.000Z"),
"end_date" : ISODate("2017-12-22T00:00:00.000Z"),
"type" : "integer_score",
"target_value" : 3,
"progresses" : [
{
"start_date" : ISODate("2016-11-25T00:00:00.000Z"),
"end_date" : ISODate("2017-11-22T00:00:00.000Z")
},
{
"start_date" : ISODate("2016-11-26T00:00:00.000Z"),
"end_date" : ISODate("2017-11-23T00:00:00.000Z")
},
{
"start_date" : ISODate("2016-11-22T00:00:00.000Z"),
"end_date" : ISODate("2017-11-23T00:00:00.000Z")
}
]
},
{
//similar document
}]
我的数据库中有多个此类活动文档。每个文档都有多个嵌入的进度。在提供活动 IDS 时,我想将活动的 start_date 和所有进度更新为 user_input_date。
我正在尝试以下查询:
db.activities.update(
{ "_id" : { $in: ["0000a021d96b12e37828db6a583a9632", "828db6a583a96320000a021d96b12e37" ] } },
{ $set: { "start_date" : ISODate("2017-11-11T00:00:00.000Z"), "progresses.$.end_date" : ISODate("2017-11-11T00:00:00.000Z") }},
{multi: true }
);
但我收到以下错误:
WriteResult({
"nMatched" : 0,
"nUpserted" : 0,
"nModified" : 0,
"writeError" : {
"code" : 16837,
"errmsg" : "The positional operator did not find the match needed from the query. Unexpanded update: progresses.$.end_date"
}
})