猫鼬关系多对一

时间:2018-03-14 12:41:16

标签: javascript node.js reactjs mongoose

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

我有一个系列"运动员" :

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

我有另一个系列" Regions"

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模型中建立他的区域。

1 个答案:

答案 0 :(得分:0)

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

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

然后,每当您更新运动员时,您只需更新此运动员,对象。或者,处理数组并不那么简单。

使用此功能,您可以查询(和填充),例如来自特定地区的所有运动员:

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

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

有更复杂的场景,您希望按各种标准查询事物,但大多数情况下,这将是最简单的方法。