`
datamachine
  • 浏览: 163378 次
社区版块
存档分类
最新评论

MongoDB的外键关联处理

    博客分类:
  • DB
阅读更多

   来源:http://stackoverflow.com/questions/29392169/populating-field-values-for-referred-documents-in-aggregate-call-in-mongoose

Mongodb本身的API需要硬编码才能实现外键关联,不够直观且难度较大,这种情况下可以用集算器来实现,下面用例子说明。

Collection UserCourseProgress记录着用户和课程的关系,其courseid字段是外键,指向Collection Course_id字段。需要统计出每门课的人数,其中课程名称需要使用Coursetitle字段。

UserCourseProgress

Course

{"userId":"u01",

"courseid":"c01",

"timespent":6000,

score:99}

{"userId":"u02",

"courseid":"c01",

"timespent":6000,

score:99}

{"userId":"u03",

"courseid":"c01",

"timespent":6000,

score:99}

{"userId":"u04",

"courseid":"c01",

"timespent":6000,

score:99}

{"userId":"u05",

"courseid":"c01",

"timespent":6000,

score:99}

{"userId":"u01",

"courseid":"c02",

"timespent":6000,

score:99}

{"userId":"u02",

"courseid":"c02",

"timespent":6000,

score:99}

{"userId":"u03",

"courseid":"c03",

"timespent":6000,

score:99}

{"_id":"c01"

"title":"Japanese159",

"description":"Japanese base",

"category":"language"}

{"_id":"c02"

"title":"Chinese200",

"description":"Chinese middle",

"category":"language"}

{"_id":"c03"

"title":"Political science 280",

"description":"Political middle",

"category":"politics"}

{"_id":"c04"

"title":"EE490",

"description":"electronic engineering hign",

"category":"Electronic"}

 

 

   集算器代码:



 

A1:连接MongoDB,连接字格式为mongo://ip:port/db?arg=value&…

         A2:统计出每门课的人数。这里使用aggregate函数从MongoDB中取数,该函数继承自mongdb,第1个参数是collection名,第2个参数是汇总表达式,遵循mongodb规范。计算结果是内存数据,如下:



 

         A3:Course中取出码表。这里使用find函数从MongoDB中取数,该函数继承自mongdb,第2个参数是过滤条件,写法遵循mongodb规范。Find的结果是游标,由于课程数量较少,因此用fetch函数将游标读入内存,结果如下:



 

         A4:使用switch函数将A3中的外键切换为A2中的记录,结果如下:



 

         A5:按对象方式访问内存,形成新的二维表,结果如下:



 

         A6:关闭mongodb连接。

  • 大小: 42.2 KB
  • 大小: 7.5 KB
  • 大小: 12.4 KB
  • 大小: 24.5 KB
  • 大小: 10.7 KB
3
3
分享到:
评论
1 楼 Long_yuan 2015-07-17  
既然用mongodb 还是赶紧丢掉sql设计范式吧

相关推荐

    MongoDB关系.pdf

    在关系型数据库中,我们通常使用表之间的外键关联来处理不同实体之间的关系。然而,MongoDB作为一个非关系型数据库,它并不直接支持传统的外键机制,而是采用了一种不同的方式来处理文档之间的关联,即嵌入式关系和...

    MongoDB应用设计模式:MongoDB Applied Design Patterns

    - **引用数据模型**:当关联数据过大或需要独立更新时,可以使用引用关系,类似于传统数据库的外键。 - **混合数据模型**:根据业务需求,灵活组合嵌入式和引用模型,平衡数据结构的复杂性和查询性能。 2. 集群与...

    mongodb客户端

    4. 处理关联数据:MySQL中的外键在MongoDB中通常通过嵌入文档或者引用实现。根据数据模型,需要决定如何处理这些关联。 5. 性能考虑:大型数据集的迁移可能需要考虑批量导入和性能优化,以减少迁移时间。 MongoDB ...

    Laravel开发-mongodb-relations

    由于MongoDB没有外键的概念,所以关系必须通过文档内的引用或内嵌文档来建立。Laravel-MongoDB支持以下几种关系类型: 1. **一对一(One to One)**:在模型中定义一个`hasOne`或`belongsTo`方法,通过`_id`字段...

    job7、mongodb设计

    3. **关联处理**: - 在关系数据库中,关系通常通过外键实现。在MongoDB中,我们可以使用嵌入式文档或引用的方式来处理关系。对于一对多或多对一的关系,如用户有多条订单,可以考虑在"order"集合中嵌入用户ID作为...

    第一课:mongoDb快速入手1

    NoSQL 不要求预定义数据模式,不使用主外键关联,支持分布式存储和复制,适合于数据量大、结构变化频繁的场景。NoSQL 数据库主要有四种类型:键值存储、列存储、文档型和图形数据库。MongoDB 属于文档型数据库,它以...

    MongoDB案例2.docx

    在实际应用中,例如记录文章、评论、点赞和附件等信息,关系型数据库可能需要创建多张表来维护它们之间的关联,如文章表、评论表、点赞表和附件表,这些表之间通过外键关联。然而,MongoDB 可以通过一个集合(相当于...

    MongoDB入门教程

    这一章节会解释如何利用这种灵活性来建立复杂的数据模型,并且阐述了如何在没有外键约束的情况下处理关联。 MongoDB学习笔记(五)讨论了MongoDB的文件存取操作,包括GridFS。GridFS是MongoDB的一个特性,用于存储和...

    MongoDB关系与数据库引用.pdf

    这种关系模式适合处理那些关联紧密且通常一起查询的数据。例如,一个用户文档可以嵌入其地址、订单等信息。然而,嵌入关系的缺点在于当数据量增大时,会导致文档大小增加,从而可能影响读写性能,如选项3所述。因此...

    mongodb实现同库联表查询方法示例

    前言 最近在工作中遇到一个问题,需要对mongodb数据库进行联表查询...populate是使用外键关联子表 例如现在有一张订单表结构(动态外键): var orderSchema = new mongoose.Schema({ uid: { type: String, require

    MongoDB北京2014 - MongoDB模式设计的艺术-该做的和不该做的 - Matias Cascallares

    通过这种方式,当查询某个用户的信息时,可以直接获取其所有地址,无需进行额外的关联查询。 #### 六、结论 MongoDB的模式设计是一门艺术,需要根据具体的应用场景和数据访问模式来决定最佳的设计方案。相比于传统...

    mongodb-meetup-schema-design

    - **数组和嵌套文档**:通过将相关联的数据组织在同一文档中,可以简化查询逻辑,尤其是在处理一对多关系时非常有用。 #### 三、简化关系 在传统的SQL数据库中,为了保持数据的一致性和完整性,通常会采用外键等...

    BBS数据库设计sql

    - 分类ID(CategoryID):外键,关联到主题所属的分类。 - 标题(Title):描述主题内容的短语。 - 创建时间(CreateTime):主题被创建的日期和时间。 - 最后回复时间(LastReplyTime):主题最后一条回复的...

    浅谈MongoDB 关系

    在关系型数据库中,我们习惯于使用表之间的外键关联来处理数据间的联系,而在MongoDB中,由于其非关系型的特性,数据之间的关联通常通过嵌入式关系或引用关系来实现。 **嵌入式关系**: 在MongoDB中,嵌入式关系是...

    SpringMongoDBSample:使用SpringData访问MongoDB的简单例子

    而在MongoDB中,有三种方式来处理对象间的关联:内嵌(embedding)、引用(referencing)和混合(hybrid)。Spring Data MongoDB支持这三种方式。其中,引用关系通常通过`DBRef`对象实现,它包含了被引用文档的集合...

    mongodb_applied_design_patterns

    关系模型通过表来表示实体,并利用外键等机制来实现实体之间的关联。 - **规范化**:为了减少数据冗余和提高数据一致性,关系型数据库设计过程中通常会遵循一系列规范化规则,这些规则称为“正常化形式”(Normal ...

    MySQL和MongoDB设计实例对比分析

    而MongoDB是NoSQL数据库中的文档型代表,它以BSON(一种JSON-like格式)存储数据,支持动态模式,更适合非结构化或半结构化的数据处理。 在上述手机产品库的例子中,MySQL采取了典型的表关联设计。手机基本信息存储...

    djangoORM如何处理N+1查询.pdf

    在描述中提到的基本场景是一个典型的例子:`Category`和`Article`两个模型,其中`Article`通过外键关联到`Category`。当在模板中循环显示`Article`对象并获取每个文章的分类名称时,Django ORM默认会为每个文章执行...

    mongodb与sql关系型数据比较

    这些表格之间可以通过外键建立关联,执行复杂的JOIN操作以获取跨表的数据。这种设计适合处理高度结构化、规则性强的数据,且对于需要严格事务处理的业务场景非常有效。 相比之下,MongoDB是一种NoSQL数据库,特别是...

    SCHOOL-DB-WITH-MONGODB:使用MONGODB创建的学校数据库

    在关系数据库中,我们通常通过外键进行关联。但在MongoDB中,可以使用内嵌文档或者引用的方式来实现关联。例如,课程文档内可以嵌入教师的ID,表示该课程由哪位教师教授;同样,学生文档可以包含他们所选课程的ID,...

Global site tag (gtag.js) - Google Analytics