【问题标题】:Defining a property on mongo schema referencing another schema plus extra fields在 mongo 模式上定义一个属性,引用另一个模式和额外的字段
【发布时间】:2014-10-23 05:45:39
【问题描述】:

我正在尝试使用 mongoose 定义一个 mongo Schema。我需要创建一个引用用户的“事件架构”。因此,我使用用户架构的引用 ObjectId 填充“用户”字段。但是,我还需要在该用户属性上添加一些特定于事件的额外字段。所以像下面这样:

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().populate('users').exec(function (err, events) {....

【问题讨论】:

  • “这不起作用”。请准确
  • 我已经编辑了这个问题。见上文。
  • 你可以试试populate('users.profile')
  • 太棒了,成功了!谢谢!!

标签: javascript node.js mongodb express mongoose


【解决方案1】:

你必须使用,正如我在 cmets 中所说的:

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

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 2023-03-23
    • 2017-06-09
    • 1970-01-01
    • 2022-11-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多