如何填充“子文档”(Doc_1.Doc_2 - > Doc_3)

时间:2013-11-12 22:06:41

标签: mongodb mongoose

我正在尝试填充“子文档”,我的想法是构建启用路径Session.Groups[0].Members[0]._user.pseudo (Session.Groups -> User)的对象,这是我尝试过的,2种不同的方法,有2个不同的问题:

  • 第一个没有填充任何内容(甚至不是“第一个文档(Groups)”)。
  • 第二个在我填充之后给我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);
            }
        });

0 个答案:

没有答案