【发布时间】:2012-01-22 13:21:42
【问题描述】:
我使用 MongoDB 作为我的应用程序的日志管理器,然后同步移动客户端。我在 NodeJS 中设置了这个模型:
var UserArticle = new Schema({
date: { type: Number, default: Math.round((new Date()).getTime() / 1000) }, //Timestamp!
user: [{type: Schema.ObjectId, ref: "User"}],
article: [{type: Schema.ObjectId, ref: "Article"}],
place: Number,
read: Number,
starred: Number,
source: String
});
mongoose.model("UserArticle",UserArticle);
var Log = new Schema({
user: [{type: Schema.ObjectId, ref: "User"}],
action: Number, // O => Insert, 1 => Update, 2 => Delete
uarticle: [{type: Schema.ObjectId, ref: "UserArticle"}],
timestamp: { type: Number, default: Math.round((new Date()).getTime() / 1000) }
});
mongoose.model("Log",Log);
当我想检索日志时,我使用以下代码:
var log = mongoose.model('Log');
log
.where("user", req.session.user)
.desc("timestamp")
.populate("uarticle")
.populate("uarticle.article")
.run(function (err, articles) {
if (err) {
console.log(err);
res.send(500);
return;
}
res.json(articles);
如您所见,我希望 mongoose 填充 Log 集合中的“uarticle”字段,然后我想填充 UserArticle 的“article”字段(“uarticle”)。
但是,使用此代码,Mongoose 仅使用 UserArticle 模型填充“uarticle”,而不是 uarticle 内部的文章字段。
是否可以使用 Mongoose 和 populate() 来完成它,或者我应该做其他事情?
谢谢,
【问题讨论】:
-
我遇到了同样的问题,其中引用嵌入在数组中 -> myList: [{ mid: {type:Schema.ObjectId, 'ref':'OtherModel'}, meta: [细绳]}]。当我尝试 .populate('myList.mid')... TypeError: Cannot call method 'path' of undefined 时,这会产生以下错误
标签: mongodb node.js mongoose populate