[英]Mongodb reference in Node.JS application
我正在从事这个副项目,并决定在构建网站的过程中将使用一些新知识,因此对于我的数据库解决方案,我将使用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]
}]
});
如您所见,游戏模式具有游戏中所有玩家的阵列,以及具有游戏者阵列的团队阵列(稍后将在过程中分配)。 我的印象是,游戏架构引用了玩家架构(因为当我签入玩家架构中的DB玩家并且游戏中架构共享相同的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注释,并尝试了几种方法,但似乎没有任何结果。 所以有两个问题:这里引用/定义模式的正确方法是什么? 我将如何更新播放器,以便在任何地方更新它们?
谢谢。
您在这里要做的是在游戏模式和团队模式中添加玩家对象。 它不是参考,似乎是一个不同的对象。 因此,如果您更新一个球员,游戏中的球员和团队将不会得到更新。 MongoDb没有此类功能。 猫鼬提供了一些东西,但猫鼬图书馆负责。 http://mongoosejs.com/docs/populate.html
您应该做的是在游戏和团队中存储玩家ID。 或将gameId和teamId存储在玩家中(根据您要查询和返回结果的方式)
MongoDb中的每个集合(表)本身都是独立的,您无法创建引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.