我最近开始使用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 – mongoDB / mongoose设计的关系数据库设计的更多相关文章

  1. ios – Swift Realm新手:一个简单的Realm对象及其初始化器的问题

    几周前我一直是Objective-C的开发人员,并且听说过Realm.另一方面,我一直希望一点一点地迁移到Swift,所以我创建了一个涉及RealmSwift的小项目.这是什么意思?如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  2. Swift 如何访问 MongoDB

    Perfect开源项目参与Perfect开发Slack在线协同MongoDBMongoDB库函数是在mongo-c语言库的基础上封装而成,能够为Swift轻松访问MongoDB服务器提供便利。请确保安装并激活了最新版本的Swift3.0toolchain。注意每次向项目追加依存关系时,必须要打开Swift软件包管理器重新创建一个新的Xcode项目文件。在您的项目中声明MongoDB请在您的Perfect项目源程序开头声明并导入MongoDB函数库:创建一个MongoDB数据库连接创建到MongoDB服务器

  3. android – 尝试为GreenDAO运行DaoGenerator时出现NoClassDefFoundError

    我有一个Android项目,使用AndroidStudio2.3,它使用GreenDAO生成与sqlite数据库交互的类.DaoGenerator项目之前总是工作……

  4. TP5(thinkPHP5)框架mongodb扩展安装及特殊操作示例

    这篇文章主要介绍了TP5(thinkPHP5)框架mongodb扩展安装及特殊操作,结合实例形式分析了MongoDB扩展的基本安装、配置、模型操作以及使用Push操作实现的数据添加、更新等方法,需要的朋友可以参考下

  5. Node.js和MongoDB实现简单日志分析系统

    这篇文章主要介绍了Node.js和MongoDB实现简单日志分析系统,本文给出了服务器端、客户端、图表生成、Shell自动执行等功能的实现代码,需要的朋友可以参考下

  6. mongoose更新对象的两种方法示例比较

    最近在使用mongoose的时候发现了一个之前一直没注意的知识点,下面这篇文章主要给大家介绍了关于mongoose更新对象的两种方法,通过示例代码将两种方法进行详细的对比,以给大家更好的参考学习,需要的朋友可以参考下。

  7. Laravel框架中集成MongoDB和使用详解

    今天小编就为大家分享一篇Laravel框架中集成MongoDB和使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  8. Mongoose经常返回e11000 error的原因分析

    这篇文章主要给大家分析了Mongoose经常返回e11000 error的原因,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友可以们下面来一起看看吧。

  9. Node.js中使用mongoskin操作mongoDB实例

    这篇文章主要介绍了Node.js中使用mongoskin操作mongoDB实例,Mongous是一个轻量级的nodejs mongodb驱动,需要的朋友可以参考下

  10. Node.js中使用mongoose操作mongodb数据库的方法

    如何利用mongoose将数据写入mongodb数据库呢?操作方法很简单,下面小编给大家分享Node.js中使用mongoose操作mongodb数据库的方法,感兴趣的朋友一起看看吧

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部