實現 MongoDB 外來鍵關聯
【摘要】
Mongodb 作為分散式檔案儲存的資料庫,想實現多表關聯 JOIN 查詢並非易事。但通過集算器 SPL 語言,在 Mongodb 中多個表的外來鍵關聯查詢,完全可以做到像關聯式資料庫那樣方便容易。若想了解更多,請前往乾學院:
實現 MongoDB 外來鍵關聯!
MongoDB 是一個分散式檔案儲存的資料庫,也是 nosql 中最像關係型資料庫的一種。但是 mongodb 採用文件模式設計的,這意味著集合中的文件可以有相同或不同的欄位,因此在關係型資料庫非常擅長的多表關聯方面就顯得差強人意。如果採用 Mongodb 本身的 API 則需要硬編碼才能實現外來鍵關聯,不夠直觀且難度較大,這種情況下可以用集算器 SPL 語言來實現,下面用例子說明。
Collection UserCourseProgress 記錄著使用者和課程的關係,其courseid欄位是外來鍵,指向Collection Course的_id欄位。需要統計出每門課的人數,其中課程名稱需要使用Course的title欄位進行顯示。
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"} |
使用集算器SPL的程式碼如下:
A1: 連線MongoDB,連線字格式為mongo://ip:port/db?arg=value&…。
A2: 統計出每門課的人數。這裡使用MongoDB聚合函式aggregate在UserCourseProgress中取數,引數是遵循mongodb規範的彙總表示式。計算結果是記憶體資料,如下:
A3: 用find函式從Course中取數,過濾條件為空。Find的結果是遊標,由於課程數量較少,因此用可以fetch函式將遊標讀入記憶體,結果如下:
A4: 使用switch函式將A3中的外來鍵切換為A2中的記錄,結果如下:
A5:按物件方式訪問記憶體,形成新的二維表,結果如下:
A6:關閉mongodb連線。
通過上面的例子可以看到,藉助集算器SPL語言,在Mongodb中多個表的外來鍵關聯查詢,完全可以做到像關聯式資料庫那樣方便、容易、直觀,不必擔心因為Mongodb是非關係型資料庫而帶來的表間弱關聯的影響。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31543054/viewspace-2657823/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Mysql truncate table時解決外來鍵關聯MySql
- 在MySQL中利用外來鍵實現級聯刪除(轉)MySql
- 父表修改與外來鍵的關係(主鍵DML與外來鍵的關係)
- Oracle 外來鍵的級聯處理Oracle
- 關於外來鍵的理解和實驗步驟
- MongoDB 關係實現MongoDB
- 快速刪除有外來鍵關聯的資料庫的資料資料庫
- Django(15)外來鍵和表關係Django
- 聊聊 Webpack 外掛系統的關鍵實現 TapableWeb
- 關於 oracle 外來鍵引用 與 goldengateOracleGo
- sqlserver外來鍵SQLServer
- 【實驗】【外來鍵】小議外來鍵約束對應用程式的影響
- 在已存在的表結構上新增主鍵、外來鍵、聯合主鍵、聯合索引的例子索引
- Mongodb 關聯表查詢MongoDB
- indexedDB 內鍵與外來鍵Index
- mysql啟動和關閉外來鍵約束MySql
- Oracle查詢表的外來鍵引用關係Oracle
- Entity Framework Code First新增修改及刪除外來鍵關聯實體Framework
- MYSQL的外來鍵MySql
- 外來鍵技術
- Typescript 下 Mongoose 外來鍵型別&外來鍵陣列型別定義&型別保護&聯合型別理解TypeScriptGo型別陣列
- Holer實現MongoDB資料庫外網訪問MongoDB資料庫
- MongoDB關聯另一個集合MongoDB
- 實現多表關聯來方便你的SELECT查詢功能
- 關鍵路徑JS實現JS
- AssociatedObject關聯物件原理實現Object物件
- mysql中的外來鍵MySql
- oracle 主外來鍵關係及實驗Oracle
- mysql學習筆記--插入日期--case--ifnull--if--lower、upper--concat--建立外來鍵關聯表MySql筆記Null
- Pig 實現關鍵詞匹配
- JavaFx 關鍵字高亮文字實現Java
- javascript實現關鍵字高亮(轉)JavaScript
- Java Web Start 實現關鍵 (轉)JavaWeb
- 關聯物件的實現原理【OC】物件
- vc++實現檔案關聯C++
- SQL的主鍵和外來鍵約束SQL
- Oracle根據主鍵查詢外來鍵Oracle
- mysql建立外來鍵語句MySql