2011-11-28 6 views
2

J'essaie de mettre à jour un hachage imbriqué dans un document MongDB. Je connais la fonction $push pour les tableaux, et $set pour les éléments complètement écrasés, mais je n'arrive pas à obtenir le comportement que je recherche.Mise à jour d'un document imbriqué dans MongoDB

Voici ce que je suis en train de faire:

Avant:

{ 
    'id' => 1234, 
    'evaluators' => { 
    'A' => { 'x' => 2, 'y' => 4 }, 
    } 
} 

attendu, après:

{ 
    'id' => 1234, 
    'evaluators' => { 
    'A' => { 'x' => 2, 'y' => 4 }, 
    'B' => { 'x' => 3, 'y' => 5 }, 
    } 
} 

J'ai essayé de le faire (en Ruby) :

coll.update({ :id => id }, 
      { '$set' => { 
       'evaluators' => { 
        evaluator_name => { 'adequacy' => adequacy, 
             'fluency' => fluency } 
       } 
      } }) 

Mais il écrase le contenu de mon evaluators hachage et je finis avec:

{ 
    'id' => 1234, 
    'evaluators' => { 
    'B' => { 'x' => 3, 'y' => 5 }, 
    } 
} 

que je pouvais faire une requête pour charger le document entier en Ruby, modifier les données et réinsérez à la DB mais je me demandais s'il y avait une meilleure façon dont je ne sais pas.

Répondre

2

Essayez celui-ci:

coll.update({ :id = > id }, { '$set' => { 
    "evaluators.#{evaluator_name}" => { 
     'adequacy' => adequacy, 'fluency' => fluency 
    } 
}}) 
+0

ont parfaitement fonctionné, merci! –

Questions connexes