2011-07-05 177 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