2010-06-10 80 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