如何更新MongoDB文档中的数组元素匹配条件?

如何更新MongoDB文档中的数组元素匹配条件?,mongodb,Mongodb,我有一个带有数组字段的文档,类似于: { "_id" : "....", "Statuses" : [ { "Type" : 1, "Timestamp" : ISODate(...) }, { "Type" : 2, "Timestamp" : ISODate(...) }, //Etc. etc. ] } 如何通过指定特定状态项的类型值来更新其时间戳?在mongodb shell中,您可以通过 db.your_collection.update(

我有一个带有数组字段的文档,类似于:

{ 
  "_id" : "....",
  "Statuses" : [
    { "Type" : 1, "Timestamp" : ISODate(...) },
    { "Type" : 2, "Timestamp" : ISODate(...) },
    //Etc. etc.
  ]
}

如何通过指定特定状态项的类型值来更新其时间戳?

在mongodb shell中,您可以通过

db.your_collection.update(
    { _id: ObjectId("your_objectid"), "Statuses.Type": 1 },
    { $set: { "Statuses.$.Timestamp": "new timestamp" } }
)
那么c#等价物呢

var query = Query.And(
    Query.EQ("_id", "your_doc_id"),
    Query.EQ("Statuses.Type", 1)
);

var result = your_collection.Update( 
    query, 
    Update.Set("Statuses.$.Timestamp", "new timestamp", UpdateFlags.Multi,SafeMode.True)
); 

这将更新特定文档,如果要更新整个集合,您可以删除_idfilter

是否有任何方法更新整个对象,除了它的id?值得一提的是,它将只更新第一个匹配的元素。