2014-08-29 38 views
0

我想用mongoose定义一个mongo模式。我需要创建一个引用用户的'Event Schema'。所以我用用户Schema的引用ObjectId填充'users'字段。不过,我还需要在该用户属性上添加一些特定于该事件的额外字段。因此,如下所示:在引用另一个模式加上额外字段的mongo模式中定义一个属性

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var EventSchema = new Schema({ 

    name: String, 
    date: Date, 
    users: [{ 
     profile: { 
      type: Schema.ObjectId, 
      ref: 'User' 
     }, 
     RankNumber: Number, 
     bibNumber: Number 
    }], 
    published: Boolean 

}); 

mongoose.model('Event', EventSchema); 

但这不起作用。我不确定最好的方式去做我想要达到的目标。

所以,如果我有一个构造函数,例如:

function User(bib, rank, profile) { 
    this.bib = bib; 
    this.rank = rank; 
    this.profile = profile; 
} 

,然后我调用构造函数并传递一个用户ID为配置文件属性,MongoDB的将创建一个新的ID字段。我得到一个像这样的JSON响应:

{ 
    "name": "Event name", 
    "_id: "mongoid", 
    "users": [ 
     { 
      "bibNumber": "278", 
      "rankNumber": "21", 
      "profile": "users mongo _id number", 
      "_id": "a new mongo _id" 
     } 
    ] 
} 

我需要填充配置文件字段。但是,下面的不会起作用:。

Event.find()填充( '用户')执行(函数(ERR,事件){....

+0

“这行不通”请精确 – Vinz243 2014-08-29 09:38:53

+0

我已经编辑了问题,见上面 – StujayH 2014-08-29 10:42:36

+0

你可以尝试'填充(“users.profile”)' – Vinz243 2014-08-29 10:48:43

回答

0

你必须使用,就像我说的在注释:

Event.find(...).populate('users.profile').exec(...); 
相关问题