Я использую 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 заполнил поле "uarticle" из коллекции Log, а затем я хочу заполнить поле "article" в UserArticle ("uarticle").
Но, используя этот код, Mongoose только заполняет "uarticle", используя модель UserArticle, но не поле article внутри uarticle.
Можно ли сделать это, используя Mongoose и populate (), или я должен сделать что-то еще?
Спасибо,