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

前端之家收集整理的这篇文章主要介绍了javascript – mongoDB / mongoose设计的关系数据库设计前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我最近开始使用mongoDB和mongoose作为我的新node.js应用程序.在我努力适应mongoDB / nosql思维方式(例如非规范化和缺乏外键关系)之前,只使用了关系数据库.我有这个关系数据库设计:
**Users Table**

user_id
username
email
password

**Games Table**

game_id
game_name

**Lobbies Table**

lobby_id
game_id
lobby_name

**scores Table**

user_id
game_id
score

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

var UserSchema = new mongoose.Schema({
    username: {
        type: String,index: true,required: true,unique: true
    },email: {
        type: String,required: true
    },password: {
        type: String,required: true
    }
});

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

编辑1

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

var UserSchema = new mongoose.Schema({
    _id: Number,username: {
        type: String,scores: [{ type: Schema.Types.ObjectId,ref: 'score' }]
});

var GameSchema = new mongoose.Schema({
    _id: Number,name: String
});

var LobbySchema = new mongoose.Schema({
    _id: Number,_game: { type: Number,ref: 'Game' },name: String
});

var scoreSchema = new mongoose.Schema({
    _user : { type: Number,ref: 'User' },_game : { type: Number,score: Number
});

解决方法

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

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

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

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

猜你在找的JavaScript相关文章