免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
實現(xiàn) MongoDB 外鍵關聯(lián)
來源:http://stackoverflow.com/questions/29392169/populating-field-values-for-referred-documents-in-aggregate-call-in-mongoose
MongoDB 是一個分布式文件存儲的數(shù)據(jù)庫,也是 nosql 中最像關系型數(shù)據(jù)庫的一種。但是 mongodb 采用文檔模式設計的,這意味著集合中的文檔可以有相同或不同的字段,因此在關系型數(shù)據(jù)庫非常擅長的多表關聯(lián)方面就顯得差強人意。如果采用 Mongodb 本身的 API 則需要硬編碼才能實現(xiàn)外鍵關聯(lián),不夠直觀且難度較大,這種情況下可以用集算器 SPL 語言來實現(xiàn),下面用例子說明。
Collection UserCourseProgress 記錄著用戶和課程的關系,其courseid字段是外鍵,指向Collection Course的_id字段。需要統(tǒng)計出每門課的人數(shù),其中課程名稱需要使用Course的title字段進行顯示。
UserCourseProgressCourse
{"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"}
使用集算器SPL的代碼如下:
A
1=mongo_open("mongodb://localhost:27017/local?user=test&password=test")
2=mongo_shell(A1,"UserCourseProgress.aggregate([{$group:   {_id: {'primary':'$courseid'},'popularityCount': {$sum: 1}}}, {$sort:{'popularityCount':-1}},{$project:{_id:0,'courseid':'$_id.primary','popularityCount':1}}])")
3=mongo_shell(A1,"Course.find(,{title:1})").fetch()
4=A2.switch(courseid,A3:_id)
5=A4.new(popularityCount,courseid.title)
6=mongo_close(A1)
A1: 連接MongoDB,連接字格式為mongo://ip:port/db?arg=value&…。
A2: 統(tǒng)計出每門課的人數(shù)。這里使用MongoDB聚合函數(shù)aggregate在UserCourseProgress中取數(shù),參數(shù)是遵循mongodb規(guī)范的匯總表達式。計算結果是內(nèi)存數(shù)據(jù),如下:
A3: 用find函數(shù)從Course中取數(shù),過濾條件為空。Find的結果是游標,由于課程數(shù)量較少,因此用可以fetch函數(shù)將游標讀入內(nèi)存,結果如下:
A4: 使用switch函數(shù)將A3中的外鍵切換為A2中的記錄,結果如下:
A5:按對象方式訪問內(nèi)存,形成新的二維表,結果如下:
A6:關閉mongodb連接。
通過上面的例子可以看到,借助集算器SPL語言,在Mongodb中多個表的外鍵關聯(lián)查詢,完全可以做到像關系數(shù)據(jù)庫那樣方便、容易、直觀,不必擔心因為Mongodb是非關系型數(shù)據(jù)庫而帶來的表間弱關聯(lián)的影響。
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【教程2】MongoDB學習筆記(三) —— 在MVC模式下通過Jqgrid表格操作MongoDB數(shù)據(jù)
window+apache環(huán)境下安裝mongoDB的php擴展
mongoDB之windows下安裝mongo數(shù)據(jù)庫服務
mongodb安裝
MongoDB查看版本信息總結
php cakephp 與 mongodb 集成教程
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服