2011-06-30 9 views
0

Voici mon document d'applicationMettre à jour un document dans un document et à l'intérieur d'un document

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

Je sais comment ajouter un paramètres, mais comment puis-sous-document-je ajouter une nouvelle Override « subsubdocument ».

J'ai essayé:

var query = Query.And(Query.EQ("_id", applicationId), Query.EQ("Settings._id", settingId)); 
var update = Update.AddToSetWrapped("Settings.Overrides", overrideViewModel.ToBsonDocument()); 
Run(database => database.Applications().Update(query, update, UpdateFlags.Upsert, SafeMode.True)); 

Il ne fait rien ...

Toute aide serait appréciée.

Merci les gars !!

+0

vous avez besoin de équivalent de: db.yourcollection.update ({..} , {$ push: {'Settings.Overrides': {"_ id": "Morestuff", "NewValue": "Quelque chose"}}}) –

+0

Salut @Remon van Vliet Je ne comprends pas ... – Gui

+0

En fait, je obtenez une erreur lorsque ma requête est effectuée. J'ai: Safemode détecté une erreur: ne peut pas ajouter à tableau en utilisant le nom de champ de chaîne [Overrides] (réponse: {"err": "ne peut pas ajouter à tableau en utilisant le nom de champ de chaîne [Overrides]", "code": 13048 , "n": 0, "connectionId": 60, "ok": 1}) – Gui

Répondre

0

J'ai trouvé la réponse, je devais utiliser le fonctionnement $

var query = Query.And(Query.EQ("_id", applicationId), Query.EQ("Settings._id", settingId)); 
var update = Update.AddToSetWrapped("Settings.Overrides", overrideViewModel.ToBsonDocument()); 
Run(database => database.Applications().Update(query, update, UpdateFlags.Upsert, SafeMode.True)); 
+0

John, votre exemple de code de réponse est le même que celui affiché dans votre question. Pouvez-vous expliquer quel $ opérationnel avez-vous ajouté? Merci –

Questions connexes