【问题标题】:Mongoose reference between attributes属性之间的猫鼬引用
【发布时间】:2015-05-31 20:36:22
【问题描述】:

我在猫鼬中有一些架构如下:

var tournamentSchema = new Schema({
    name:       {type: String},
    teams:      [teamSchema],
    poules:     [pouleSchema],
    createdAt:  {type: Date, default: Date.now}
})

var pouleSchema = new Schema({
    teams:      [teamSchema],
    createdAt:  {type: Date, default: Date.now}
})

var teamSchema = new Schema({
    name:       {type: String},
    createdAt:  {type: Date, default: Date.now}
})

我将在我的比赛架构中推动一些球队。准备好后,我想与团队一起创建 poules。

是否可以在“tournamentSchema.teams”和“tournamentSchema.poules”之间建立关系?我认为在 poules 属性中推送团队并不难,但是当我想更改团队名称时,我也想在 poules 中更改它。我应该手动执行此操作还是可能存在某种关系?

或者这只有在不同的模型上才有可能吗?

提前谢谢你,

罗纳德。

【问题讨论】:

    标签: node.js mongodb orm mongoose schema


    【解决方案1】:

    我认为猫鼬种群可以帮助您。试试这样的:

    var tournamentSchema = new Schema({
        name:       {type: String},
        teams:      [teamSchema],
        poules:     [pouleSchema],
        createdAt:  {type: Date, default: Date.now}
    })
    
    var pouleSchema = new Schema({
        teams:      [teamSchema],
        createdAt:  {type: Date, default: Date.now}
    })
    
    var teamSchema = new Schema({
        team: {
           type: mongoose.Schema.Types.ObjectId,
           ref: 'teamsSchema'
        }
    })
    
    var teamsSchema = new Schema({
        name:       {type: String},
        createdAt:  {type: Date, default: Date.now}
    })
    

    因此,您的团队数组中的每个对象都引用了 teamsSchema 中的 ObjectId,并且当您更改团队名称时,它会自动影响团队数组。希望对你有帮助。

    【讨论】:

    • 好的,谢谢!我试过了,但我现在如何添加团队?我做了一个锦标赛,然后我用 ID 搜索它。在回调中,我得到了锦标赛并做了:tournament.teams.push({ name: 'Test Team' })。但我会得到一个“_id”,但没有名字......
    • 一个模型可以做到这一点吗?所以只有一个“锦标赛”模型(mongoose.model('Tournament',tournamentSchema))。还是有必要为 Teams 制作特定的模型?
    • 您需要拥有包含 _id、name、createdAt 字段的团队集合,如 teamsSchema 中所述。然后在您的锦标赛.teams 中,您应该有像 {team: someObjectId} 这样的对象数组,如 teamSchema 中所述。 someObjectId 指的是团队集合中的团队 _id 之一。然后,当您查询锦标赛时,您应该填充您的 teams.team。请阅读有关猫鼬种群的信息,您会很清楚。
    • 感谢您的回答。我对填充函数有所了解,但那是在模型之间。我想创建一个模型“锦标赛”并将所有内容存储在其中。但我不知道是否可以在模型本身内填充。如果这不可能,我必须为 Teams 和 Tournaments 创建一个模型。
    • 但是为什么要将球队存储在锦标赛收藏中呢?我认为,这是解决问题的错误方法。
    猜你喜欢
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 2020-07-15
    • 2018-07-15
    • 2022-01-26
    • 1970-01-01
    • 2017-09-04
    相关资源
    最近更新 更多