2011-07-05 16 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レベルで別のサブ文書Settings [0]:{}を持っています。 { "_id": "binary_stuff"、 "名前": "MyApplicationを"、 "設定":[ { "_id": "binary_stuff"、 "キー": "ImportDirectory" この文書を見て、 "値": "C:\データ"、 "オーバーライド":[{ "_id": "binary_stuff"、 "名前": "PathDirectory"、 "値": "C:\ anotherData" このクエリを試してみると:var query = Query.And(Query.EQ( "_ id"、applicationId)、Query.EQ( ")、 " Settings [0] ":{}、 }、 } – Gui

関連する問題