【问题标题】:Mongoose relationship multiple to one猫鼬关系多对一
【发布时间】:2018-08-23 00:03:36
【问题描述】:

我有一个问题,更确切地说,我不了解猫鼬和关系的一件事。

我有一个“运动员”系列:

var athletesSchema = mongoose.Schema({
name : String,
regionName : String,
age : Number,
overallScore : Number,
scores : {
    ordinnal : String,
    ordinnal2 : String,
    ordinnal3: String,
    ordinnal4: String,
    ordinnal5:String
}
})

我有另一个集合“区域”

var regionsSchema = mongoose.Schema({
name: String,
athletes: [{ type: Schema.Types.ObjectId, ref: 'Athletes' }]
})

一个运动员有一个地区,但一个地区有多名运动员。我不明白这怎么可能,当我创建一个运动员时,模型区域知道它是在这个区域还是这个区域。

我的 server.js 有这个:

Athletes.find({name : datas.name}, function(err, name){
        if(name == ""){
            Athletes.create(datas, function(err, ath){
                   if(err || ath.name){
                       console.log(err)
                   }
                   Regions.create(regionName, function(err){
                    if(err){
                        console.log(err)
                    }
                })
           })

        }
    }) 

我在创建新用户之前检查是否不在数据库中,是不是我创建了运动员,但我不知道如何在 Region 模型中拥有他的区域。

【问题讨论】:

    标签: javascript node.js reactjs mongoose


    【解决方案1】:

    也许你会更容易扭转这一点。有区域只有名称。然后在 Athlete 模型上添加 regionId:

    region: {
      type: mongoose.Schema.Types.ObjectId,
      ref: 'Regions',
      index: true,
    }
    

    那么任何时候你更新一个运动员,你只是在更新这个,运动员,对象。或者,处理数组并不那么简单。

    有了这个你可以查询(和填充),例如来自特定地区的所有运动员:

    Athletes.find({ region: [region1, region2]})
      .populate('region')
    

    现在,更新区域名称已简化,您可以在一个地方进行,而不是在所有运动员实例上。

    在更复杂的场景中,您希望通过各种条件查询事物,但大多数情况下,这将是最简单的方法。

    【讨论】:

    • 感谢您的评论。我从 API 获取数据,在运动员的数据中,为每个运动员指明了地区。但我想创建一个包含地区的数据库,包括每个地区的每个运动员。它允许我拥有独特的区域并用它做一些图表。
    • 你仍然可以这样做。如果您研究聚合,即使您问另一个问题,关于如何聚合某些结果、按区域分组、排序、项目和所有其他内容,您可能会对您可以实现的目标有很好的感觉。
    猜你喜欢
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2022-01-14
    • 2014-06-15
    相关资源
    最近更新 更多