Я пытаюсь использовать функцию популяции мангустов. Запись данных не является проблемой; все идентификаторы объектов хранятся в родительском (Account) документе. Я проверил это с помощью простого запроса Account.find (). Однако, когда я пытаюсь запросить «учетные записи» и заполнить его соответствующими видеообъектами, объект «видео» в документе учетной записи пуст. Я прочитал все возможные ресурсы и документацию по этому вопросу, и я как бы застрял на этой теме. Кто-нибудь может мне помочь? Спасибо!

Схема

var videoSchema = new Schema({
   url: String,
   status: String,
});

mongoose.model('Video', videoSchema );

var accountSchema = new Schema({
    name: { type: String, required: true },
    videos: [{ type: Schema.Types.ObjectId, ref: 'Video' }]
});

mongoose.model('Account', accountSchema ); 

Написать данные

new Video({ userAgent: referrer: req.headers.['url'], status: "created" }).save(function(err, video){
  Account.update({ _id: req.headers['appid'] }, {$push: { videos: [ video._id ] } },    function (err, account){
     if(err) console.log(JSON.stringify(err));
  });
}); 

Получить данные, используя заполнение

Account.findById(req.params.id).populate('videos').exec(function(err, account){
   console.log(JSON.stringify(account));
   res.render('./account/show', account);
}); 
0
franksprings 4 Фев 2014 в 16:59

1 ответ

Лучший ответ

Ваш оператор $push помещает массив в массив, что приводит к сбою популяции.

Используйте вместо этого:

{ $push: { videos: video._id } }

Если в конечном итоге у вас есть массив видео, который вы хотите объединить с существующим свойством videos учетной записи, вы можете использовать $each:

{ $push: { videos : { $each : [ video1._id, video2._id, ... ] } } }
3
robertklep 4 Фев 2014 в 17:30