javascript – mongoDB / mongoose设计的关系数据库设计

前端之家收集整理的这篇文章主要介绍了javascript – mongoDB / mongoose设计的关系数据库设计前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近开始使用mongoDB和mongoose作为我的新node.js应用程序.在我努力适应mongoDB / nosql思维方式(例如非规范化和缺乏外键关系)之前,只使用了关系数据库.我有这个关系数据库设计:
  1. **Users Table**
  2.  
  3. user_id
  4. username
  5. email
  6. password
  7.  
  8. **Games Table**
  9.  
  10. game_id
  11. game_name
  12.  
  13. **Lobbies Table**
  14.  
  15. lobby_id
  16. game_id
  17. lobby_name
  18.  
  19. **scores Table**
  20.  
  21. user_id
  22. game_id
  23. score

因此,每个大厅属于一个游戏,多个大厅可以属于同一个游戏.用户对于不同的游戏也有不同的分数.到目前为止,对于我的用户架构,我有以下内容

  1. var UserSchema = new mongoose.Schema({
  2. username: {
  3. type: String,index: true,required: true,unique: true
  4. },email: {
  5. type: String,required: true
  6. },password: {
  7. type: String,required: true
  8. }
  9. });

所以我的问题是,如何将关系设计结构化为mongoDB / mongoose模式?谢谢!

编辑1

我现在尝试创建所有模式,但我不知道这是否是正确的方法.

  1. var UserSchema = new mongoose.Schema({
  2. _id: Number,username: {
  3. type: String,scores: [{ type: Schema.Types.ObjectId,ref: 'score' }]
  4. });
  5.  
  6. var GameSchema = new mongoose.Schema({
  7. _id: Number,name: String
  8. });
  9.  
  10. var LobbySchema = new mongoose.Schema({
  11. _id: Number,_game: { type: Number,ref: 'Game' },name: String
  12. });
  13.  
  14. var scoreSchema = new mongoose.Schema({
  15. _user : { type: Number,ref: 'User' },_game : { type: Number,score: Number
  16. });

解决方法

Mongoose的设计方式使您可以相对轻松地对表进行关系建模,并根据您在模式中定义的引用来填充关系数据.问题是你需要小心填充.如果您填充太多或嵌套您的人口,您将遇到性能瓶颈.

您在Edit 1中的方法基本上是正确的,但是您通常不希望基于Number填充远程ref或将模型的_id设置为Number,因为mongo使用它自己的散列机制来管理_id,这通常是隐含了_id的ObjectId.示例如下所示:

  1. var scoreSchema = new mongoose.Schema({
  2. user : { type: Schema.Types.ObjectId,game : { type: Schema.Types.ObjectId,score: Number
  3. });

如果由于某种原因你需要为你的记录保留一个数字id,可以考虑将其称为uid或者与mongo / mongoose内部不冲突的东西.祝好运!

猜你在找的JavaScript相关文章