我正在尝试填充“子文档”,我的想法是构建启用路径Session.Groups[0].Members[0]._user.pseudo (Session.Groups -> User)
的对象,这是我尝试过的,2种不同的方法,有2个不同的问题:
Session.Groups[0].Members[0]._user === null
。我已经看到了关于如何做到这一点的答案here,但它在我的情况下不起作用。 我刚刚更新了mongoose到v3.8.0。
var UserSchema = new mongoose.Schema({
pseudo: { type: String, required: true, unique: true }
)};
Db['User'] = db.model('User', UserSchema);
var GroupSchema = new mongoose.Schema({
Members: [
{ _user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, points: { type: Number, required: true, default: -1 } },
{ _user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, points: { type: Number, required: true, default: -1 } },
{ _user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, points: { type: Number, required: true, default: -1 } }
]
});
Db['Group'] = db.model('Group', GroupSchema);
var SessionSchema = new mongoose.Schema({
date: { type: Date, required: true, default: Date.now },
Groups: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Group' }]
});
Db['Session'] = db.model('Session', SessionSchema);
案例#1
Db['Session']
.find()
.populate('Groups.Member._user') // I get anything populate (not even the Groups).
.exec(function(err, Sessions) {
var nb_populated = Sessions.length;
for (var Session in Sessions)
Sessions[Session].populate('Groups.Members._user', function(err, Res) {
if (err)
console.error('Error when populating Groups.Members._user');
nb_populated--;
if (!nb_populated) {
console.log(JSON.stringify(Res.Groups)); //Here, i just get the Groups ids
res.send(200, Res);
}
});
案例#2
Db['Session']
.find()
.populate('Groups')
.exec(function(err, Sessions) {
var nb_populated = Sessions.length;
for (var Session in Sessions)
Sessions[Session].populate('Groups.Members._user', function(err, Res) {
if (err)
console.error('Error when populating Groups.Members._user');
nb_populated--;
if (!nb_populated) {
console.log(JSON.stringify(Res.Groups)); //Here, every Members._user become `=== null` (wasn't befor the `populate()` call).
res.send(200, Res);
}
});