2010-06-10 8 views
1

J'essaie de trouver un moyen de mettre à jour les valeurs dans un tableau d'objets dans mongo. J'ai une collection qui ressemble àMise à jour des valeurs dans un tableau dans MongoDB

[ 
    { CourseName: '', 
     Sessions: [ 
       { 
       _id: null, //oops I didn't set this in the import 
       Name: 'blah', 
       Location: 'moon' 
       }] 
    } 
    ] 

Maintenant j'ai besoin de définir le champ _id. J'ai essayé l'approche documentée de faire

db.Course.update({'Sessions._id': null}, {$set:{'Sessions.$._id': ObjectId()}}, false, true) 

Mais je suis tombé sur ce bug http://jira.mongodb.org/browse/SERVER-1055 ce qui signifiait que je ne pouvais pas le faire. Y a-t-il une syntaxe qui me permettra juste de parcourir la collection et de mettre à jour chaque enregistrement à la main? J'ai essayé quelques choses comme

db.Course.find().forEach(
    function(course) 
    { 
     course.Sessions.forEach(function(session) 
      { 
       session._id=ObjectId(); 
       course.Save(session); //Don't know how to save a single object 
      }); 
    }); 

mais ils ne fonctionnaient pas. Je cherche un moyen de simplement mettre à jour cette valeur dans chaque session.

Répondre

6

Je pense que ce que vous voulez est:

db.Course.find().forEach(
    function(course) 
    { 
     course.Sessions.forEach(function(session) 
      { 
       session._id=ObjectId(); 
      }); 
     db.Course.save(course); 
    }); 

Cependant, vous pouvez rencontrer des problèmes d'économie des choses dans une collection que vous êtes au milieu de itérer, alors je vous suggère de charger un tas de documents dans un tableau, en les traitant, en chargeant un autre lot, etc.

+0

Belle, merci. – stimms

+0

et dans mongo cli? –

Questions connexes