2014-06-06 1 views
0

par intérim ont un document de MongoDBobjet de mise à jour dans le tableau avec de nouveaux champs mongodb

chevaux est un tableau avec identifiant, le nom, le type

{ 
    "_id" : 33333333333, 
    "horses" : [ 
     { 
      "id" : 72029, 
      "name" : "Awol", 
      "type" : "flat", 
     }, 
     { 
      "id" : 822881, 
      "name" : "Give Us A Reason", 
      "type" : "flat", 
     }, 
     { 
      "id" : 826474, 
      "name" : "Arabian Revolution", 
      "type" : "flat", 

     } 
} 

Je dois ajouter de nouveaux champs

Je pensais que quelque chose comme cela, mais je ne suis pas allé à sa tête

horse = { 
    "place" : 1, 
    "body" : 11 

} 

Card.where({'_id' => 33333333333}).find_and_modify({'$set' => {'horses.' + index.to_s => horse}}, upsert:true) 

Mais tous les champs existants sont supprimés et insérés nouveau comment faire ce serait de nouveaux champs ajoutés aux éléments existants

+0

cette aide: http://stackoverflow.com/questions/10432677/update-field-in-exact-element-array-in-mongodb –

+0

@LalitAgarwal Je l'ai lu. N'aide pas. L'objet existant est écrasé complètement. Et devrait-il être les nouveaux champs ajoutés à l'existant – user3603475

+0

Avez-vous envisagé d'utiliser la méthode de mise à jour? - http://docs.mongodb.org/manual/tutorial/modify-documents/#modify-multiple-documents-with-update-method Si trouve des documents correspondant à des critères, puis met à jour le champ - si multi est défini sur true, il sera mettre à jour tous les enregistrements correspondants. –

Répondre

2

En effet, cette commande remplacera le sous-document

'$set': { 
    'horses.0': { 
    "place" : 1, 
    "body" : 11 

    } 
} 

Vous devez définir des champs individuels:

'$set': { 
    'horses.0.place': 1, 
    'horses.0.body': 11 
} 
+0

Je le savais juste! Je vous remercie! – user3603475

Questions connexes