Mongoose人口返回空文档

时间:2014-02-04 12:59:29

标签: node.js mongodb mongoose

我正在尝试使用Mongoose人口功能。写数据不是问题;所有对象ID都存储在父(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));
  });
}); 

使用populate

检索数据
Account.findById(req.params.id).populate('videos').exec(function(err, account){
   console.log(JSON.stringify(account));
   res.render('./account/show', account);
}); 

1 个答案:

答案 0 :(得分:3)

您的$push语句正在将数组推送到数组上,这会导致填充失败。

请改用:

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

如果您最终要将一系列视频与帐户的现有videos属性合并,则可以使用$each

{ $push: { videos : { $each : [ video1._id, video2._id, ... ] } } }