首页 > 数据库技术 > 详细

MongoDB的外键关联处理

时间:2015-07-18 02:16:10      阅读:330      评论:0      收藏:0      [点我收藏+]

? ?来源: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"}

?

?

? ?集算器代码:


bubuko.com,布布扣
?

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

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


bubuko.com,布布扣
?

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


bubuko.com,布布扣
?

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


bubuko.com,布布扣
?

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


bubuko.com,布布扣
?

? ? ? ? ?A6:关闭mongodb连接。

MongoDB的外键关联处理

原文:http://datamachine.iteye.com/blog/2228081

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!