Обновить значения в массиве в MongoDB - PullRequest
1 голос
/ 10 июня 2010

Я пытаюсь придумать способ обновить значения в массиве объектов в монго. У меня есть коллекция, которая выглядит как

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

но они не работали. Я ищу способ обновить это значение в каждом сеансе.

1 Ответ

6 голосов
/ 11 июня 2010

Я думаю, что вы хотите:

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

Однако вы можете столкнуться с проблемами при сохранении материала в коллекцию, которую вы перебираете, поэтому я бы посоветовал загрузить пакет документов в массив, обработать их, загрузить другой пакет и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...