91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

實現 MongoDB 外鍵關聯

發布時間:2020-07-13 11:04:37 來源:網絡 閱讀:262 作者:raqsoft 欄目:大數據

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

【摘要】
????????Mongodb 作為分布式文件存儲的數據庫,想實現多表關聯 JOIN 查詢并非易事。但通過集算器 SPL 語言,在 Mongodb 中多個表的外鍵關聯查詢,完全可以做到像關系數據庫那樣方便容易。

MongoDB 是一個分布式文件存儲的數據庫,也是 nosql 中最像關系型數據庫的一種。但是 mongodb 采用文檔模式設計的,這意味著集合中的文檔可以有相同或不同的字段,因此在關系型數據庫非常擅長的多表關聯方面就顯得差強人意。如果采用 Mongodb 本身的 API 則需要硬編碼才能實現外鍵關聯,不夠直觀且難度較大,這種情況下可以用集算器 SPL 語言來實現,下面用例子說明。

????????Collection UserCourseProgress 記錄著用戶和課程的關系,其courseid字段是外鍵,指向Collection Course的_id字段。需要統計出每門課的人數,其中課程名稱需要使用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: 統計出每門課的人數。這里使用MongoDB聚合函數aggregate在UserCourseProgress中取數,參數是遵循mongodb規范的匯總表達式。計算結果是內存數據,如下:

????????實現 MongoDB 外鍵關聯

????????A3: 用find函數從Course中取數,過濾條件為空。Find的結果是游標,由于課程數量較少,因此用可以fetch函數將游標讀入內存,結果如下:

???????? 實現 MongoDB 外鍵關聯

???????? A4: 使用switch函數將A3中的外鍵切換為A2中的記錄,結果如下:

???????? 實現 MongoDB 外鍵關聯

????????A5:按對象方式訪問內存,形成新的二維表,結果如下:

????????實現 MongoDB 外鍵關聯

????????A6:關閉mongodb連接。

????????通過上面的例子可以看到,借助集算器SPL語言,在Mongodb中多個表的外鍵關聯查詢,完全可以做到像關系數據庫那樣方便、容易、直觀,不必擔心因為Mongodb是非關系型數據庫而帶來的表間弱關聯的影響。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

砚山县| 年辖:市辖区| 赣州市| 枣庄市| 陆良县| 道真| 克什克腾旗| 江油市| 申扎县| 泽库县| 精河县| 香格里拉县| 若羌县| 吴旗县| 遂川县| 铁岭市| 榆林市| 金寨县| 行唐县| 禹州市| 东宁县| 象州县| 长春市| 祁阳县| 罗甸县| 内丘县| 西乌珠穆沁旗| 图木舒克市| 上杭县| 金阳县| 苍溪县| 江孜县| 韩城市| 会东县| 彭州市| 安阳市| 平乐县| 柘城县| 汉沽区| 久治县| 开封县|