繁体   English   中英

Node.JS应用程序中的Mongodb参考

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM