在mongo架构上定义一个属性,引用另一个架构和额外的字段

时间:2014-08-29 08:28:54

标签: javascript node.js mongodb express mongoose

我正在尝试使用mongoose定义一个mongo Schema。我需要创建一个引用用户的“事件模式”。所以我使用用户Schema的引用ObjectId填充'users'字段。但是,我还需要在该用户属性上添加一些特定于该事件的额外字段。如下所示:

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作为profile属性,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()。populate('users')。exec(function(err,events){....

1 个答案:

答案 0 :(得分:0)

你必须使用,正如我在评论中所说:

Event.find(...).populate('users.profile').exec(...);