我正在尝试使用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);
});
答案 0 :(得分:3)
您的$push
语句正在将数组推送到数组上,这会导致填充失败。
请改用:
{ $push: { videos: video._id } }
如果您最终要将一系列视频与帐户的现有videos
属性合并,则可以使用$each
:
{ $push: { videos : { $each : [ video1._id, video2._id, ... ] } } }