【发布时间】:2018-03-17 07:36:25
【问题描述】:
我正在做这个副项目,并决定在构建网站的过程中我会使用一些新的东西来学习,所以对于我的数据库解决方案,我使用的是 Mongo(mongoose)。这个想法很简单,我有 2 个模式 - 一个持有玩家,另一个持有游戏:
var Player_Object = new Schema({
"name": {
type: String,
},
"words": {
"to_guess":[String],
"hint":[String]
}
});
var gameIdSchema = new Schema({
"name": {
type: String,
unique: true
},
"number_of_words": Number,
"password": String,
"creatingDate": Date,
"players": [Player_Object],
"teams": [{
"team_number":Number,
"team_name":String,
"score" :
[{ "round_number" : Number,
"total_score" : Number,
"points" :[Number]
}],
"players": [Player_Object]
}]
});
如您所见,游戏模式包含游戏中所有玩家的数组,以及包含玩家数组的团队数组(在此过程中稍后分配)。我的印象是游戏模式引用了玩家模式(因为当我在玩家模式和游戏内模式中签入数据库玩家时共享相同的 ID),但事实并非如此。
这里只是提供一些背景知识,这是我在创建新游戏时所拥有的:
let newGame = new Games({
name: gameData.name,
password: gameData.password,
players: newPlayers,
number_of_words: gameData.number_words,
teams: teams
}); //new game created
稍后在代码中,玩家将编辑他们的单词,当我签入数据库时,我可以看到玩家模式中的单词已被编辑,但是当我检查游戏模式时 - 没有任何改变。我知道这是由于缺乏参考。因为当我更新单词时,我只在 Player 模式中更新它们。
我的想法是,当玩家更新时,游戏模式应该看到这个玩家现在包含这个词。
我查看了 mongoDb 注释并尝试了几种方法,但似乎没有任何结果。所以 2 个问题:在这里引用\定义模式的正确方法是什么?以及我将如何更新播放器,以便它们在任何地方都得到更新?
谢谢。
【问题讨论】:
标签: javascript node.js mongodb reference