我有以下集合:
{
"Milestones" : [
{ "ActualDate" : null,
"Index": 0,
"Name" : "milestone1",
"TargetDate" : ISODate("2011-12-13T22:00:00Z"),
"_id" : ObjectId("4ee89ae7e60fc615c42e28d1")},
{ "ActualDate" : null,
"Index" : 0,
"Name" : "milestone2",
"TargetDate" : ISODate("2011-12-13T22:00:00Z"),
"_id" : ObjectId("4ee89ae7e60fc615c42e28d2") } ]
,
"Name" : "a", "_id" : ObjectId("4ee89ae7e60fc615c42e28ce")
}
Run Code Online (Sandbox Code Playgroud)
我想更新明确的文档:已指定_id,里程碑列表._id和ActualDate为空.我dotnet我的代码看起来像:
var query = Query.And(new[] { Query.EQ("_id", ObjectId.Parse(projectId)),
Query.In("Milestones._id", new BsonArray(values.Select(ObjectId.Parse))),
Query.EQ("Milestones.ActualDate", BsonNull.Value) });
var update = Update.Set("Milestones.$.ActualDate", DateTime.Now.Date);
Coll.Update(query, update, UpdateFlags.Multi, SafeMode.True);
Run Code Online (Sandbox Code Playgroud)
或者在本机代码中:
db.Projects.update({ "_id" : ObjectId("4ee89ae7e60fc615c42e28ce"), "Milestones._id" : { "$in" : [ObjectId("4ee89ae7e60fc615c42e28d1"), ObjectId("4ee89ae7e60fc615c42e28d2"), ObjectId("4ee8a648e60fc615c41d481e")] }, "Milestones.ActualDate" : null },{ "$set" : { "Milestones.$.ActualDate" : ISODate("2011-12-13T22:00:00Z") } }, false, true)
Run Code Online (Sandbox Code Playgroud)
但只有第一项正在更新.
And*_*ich 10
目前这是不可能的.multi更新中的标志意味着更新多个根文档.位置运算符只能匹配一个嵌套数组项.mongodb jira 有这样的功能.你可以投票并等待.
当前的解决方案只能加载文档,根据需要进行更新,并为每个嵌套的数组ID保存或进行多次原子更新.
来自mongodb.org的文档:
目前,$运算符仅适用于查询中的第一个匹配项
| 归档时间: |
|
| 查看次数: |
2694 次 |
| 最近记录: |