2011-07-05 6 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", 애플리케이션 ID), Query.EQ ("Settings.Key", "ImportDirectory")); 하지만 아무 것도하지 않습니다. – Gui

+0

코드 예 –

+0

을 편집했습니다. 이번에는 재정의가 여전히 제거되지 않지만 설정 레벨에서 다른 하위 문서 [0] : {}이 있습니다. { "_id": "binary_stuff" "이름": "에서는 MyApplication" "설정": [ { "_id": "binary_stuff" "키": "ImportDirectory"이 문서를 봐 , "값": "C : \ 데이터" "재정"[{ "_id": "binary_stuff" "이름" "PathDirectory" "값": "C : \ anotherData" }], "Settings [0]": {}, }, } – Gui

관련 문제