2011-07-05 4 views
4

J'utilise 10gen C# pilote pour MongoDB et je voudrais supprimer un sous-document d'un sous-document. Je ne sais pas comment le faire.MongoDB supprimer un document de sous-document à partir d'un sous-document

Voici un exemple de ce qui ressemble à mon document

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

Et je veux supprimer la Override dont le nom est PathDirectory. Voici la requête que j'ai écrite, mais cela ne fonctionne pas. Je n'ai pas d'erreur.

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)); 

Merci pour toute aide. John

Répondre

8

Vous devez utiliser l'opération $ pull pour supprimer un élément de la matrice.

 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

J'ai essayé avec cette requête avec votre code: requête var = Query.And (Query.EQ ("_ id", applicationId), Query.EQ ("Settings.Key", "ImportDirectory")); mais il ne fait rien – Gui

+0

J'ai édité l'exemple de code –

+0

Cette fois, le remplacement n'est toujours pas supprimé, mais à la place j'ai un autre sous-paramètre Settings [0]: {} au niveau des paramètres. Regardez ce document: { "_id": "binary_stuff", "Nom": "MyApplication", "Paramètres": [ { "_id": "binary_stuff", "clé": "ImportDirectory" , "Valeur": "C: \ data", "Dérogations": [{ "_id": "binary_stuff", "Nom": "PathDirectory", "Valeur": "C: \ anotherData" }], "Paramètres [0]": {}, }, } – Gui

Questions connexes