2010-06-10 88 views
1

我想要想出一种方法来更新mongo中对象数组中的值。我有一个看起来像更新MongoDB数组中的值

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

现在我需要设置_id字段。我试着做

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

的成文规定,但我遇到了这个bug http://jira.mongodb.org/browse/SERVER-1055这意味着我不能这样做。是否有一些语法可以让我仅仅通过手动来更新集合并更新每条记录?我尝试了一些东西,如

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

但他们没有工作。我正在寻找一些方法来在每个会话中更新该值。

回答

6

我想你想要的是:

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

但是,你能碰到的东西保存到您在迭代的中间是一个集合的问题,所以我建议加载大量的文件成阵列,加工它们,加载另一批次等。

+0

美丽,谢谢。 – stimms 2010-06-11 13:39:08

+0

和mongo cli? – 2013-11-26 19:09:01