2010-06-10 2 views
1

Я пытаюсь найти способ обновить значения в массиве объектов в монго. У меня есть коллекция, которая выглядит какОбновить значения в массиве в 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) 

Но я столкнулся с этой ошибкой 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

+0

и в монго-кли? –

Смежные вопросы