2011-07-05 140 views
4

我为MongoDB使用10gen C#驱动程序,我想从子文档中删除子文档。我不知道该怎么做。MongoDB从子文档中删除子文档文档

这里是什么样子我的文档

{ 
    "_id": "binary_stuff", 
    "Name": "MyApplication", 
    "Settings": [ 
    { 
     "_id": "binary_stuff", 
     "Key": "ImportDirectory", 
     "Value": "C:\data", 
     "Overrides": [{ 
      "_id": "binary_stuff", 
      "Name": "PathDirectory", 
      "Value": "C:\anotherData" 
     }] 
    }, 
} 

一个例子,我想删除覆盖其名称是PathDirectory。这是我写的查询,但不起作用。我没有错误。

var query = Query.And(Query.EQ("_id", applicationId), Query.EQ("Settings.Key", "ImportDirectory"), Query.EQ("Settings.$.Overrides.Name", "PathDirectory")); 
Run(database => database.Applications().Remove(query)); 

感谢您的任何帮助。 John

回答

8

您应该使用$ pull操作从数组中删除项目。

 var query = Query.And(Query.EQ("_id", applicationId), 
         Query.EQ("Settings.Key", "ImportDirectory")); 
     var update = Update.Pull("Settings.$.Overrides", new BsonDocument(){ 
      { "Name", "PathDirectory" } 
     }); 
     database.Applications().Update(query, update); 
+0

我试图与此查询与您的代码:var查询= Query.And(Query.EQ( “_ ID” 的applicationID),Query.EQ( “Settings.Key”, “ImportDirectory”));但它什么都不做 – Gui

+0

我编辑了代码示例 –

+0

这一次,重写仍然没有被删除,但是我在设置级别有另一个子文档Settings [0]:{}。看看这个文件: { “_id”: “binary_stuff”, “名称”: “为MyApplication”, “设置”:[ { “_id”: “binary_stuff”, “关键”: “ImportDirectory” , “值”: “C:\数据”, “替换”:[{ “_id”: “binary_stuff”, “名称”: “PathDirectory”, “值”: “C:\ anotherData” }], “Settings [0]”:{}, }, } – Gui