Mongoose - 从ref查询中检索对象

时间:2012-04-18 16:58:08

标签: node.js mongodb mongoose

我有以下架构:

var userSchema = new Schema({
    firstName: String,
    lastName: String,
    emailAddress: {type: String, set: toLower, index: {unique: true}},
});

var eventMemberSchema = new Schema ({   
    user: { type : Schema.ObjectId, ref : 'User' },
    created: { type: Date, default: Date.now }
});

var eventSchema = new Schema({
    id : String,
    name : String,
    startDate : Date,
    endDate : Date,
    venue : { type : Schema.ObjectId, ref : 'Venue' },

    invitees : [eventMemberSchema],
});

我正在尝试做的是使用invitation._id查询事件,并最终取回用户......

invitees-> eventMember->用户

到目前为止我已经:

Event
.find({ "invitees._id": req.query.invitation_id })
.populate('user')
.run(function (err, myEvent) {

  console.log('error: ' + err);
  console.log('event:  '+ myEvent);
})

这样可行,控制台显示myEvent的输出... (我意识到我不需要上面的mongoose查询的填充部分...我只是在测试)

我正在努力学习如何获得,我基本上将其描述为:myEvent.invitees.user

修改

作为更新...... 这个工作 - 然而,它有点糟糕,因为现在我需要做另一个数据库操作来获取用户(我意识到引用了mongoose中的引用)

Event
.findOne({ "invitees._id": "4f8eea01e2030fd11700006b"}, ['invitees.user'], function(err, evnt){
    console.log('err:  '+ err);
    console.log('user id:  '+ evnt.invitees[0].user); //this shows the correct user id
});

1 个答案:

答案 0 :(得分:18)

尝试

Event
.find({ "invitees._id": req.query.invitation_id })
.populate('invitees.user')

<强>更新

这是一个有效的gist