實現 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
- 關於外來鍵約束
- MongoDB 關係實現MongoDB
- 聊聊 Webpack 外掛系統的關鍵實現 TapableWeb
- Django(15)外來鍵和表關係Django
- 主鍵和外來鍵
- sqlserver外來鍵SQLServer
- Mongodb 關聯表查詢MongoDB
- indexedDB 內鍵與外來鍵Index
- Holer實現MongoDB資料庫外網訪問MongoDB資料庫
- 外來鍵約束
- MYSQL的外來鍵MySql
- 10.30 索引,外來鍵索引
- MongoDB關聯另一個集合MongoDB
- Typescript 下 Mongoose 外來鍵型別&外來鍵陣列型別定義&型別保護&聯合型別理解TypeScriptGo型別陣列
- 通過外來鍵找主鍵
- 關鍵路徑JS實現JS
- Pig 實現關鍵詞匹配
- oracle 主外來鍵關係及實驗Oracle
- 外來鍵的變種
- AssociatedObject關聯物件原理實現Object物件
- JavaFx 關鍵字高亮文字實現Java
- 容器映象服務聯手 IDE 外掛,實現一鍵部署、持續整合與交付IDE
- 為什麼現在大家都不用外來鍵了(二)?
- mysql建立外來鍵語句MySql
- 為什麼不用外來鍵
- 約束外來鍵筆記筆記
- django外來鍵如何賦值Django賦值
- 關聯物件的實現原理【OC】物件
- 從儀表盤探索 MongoDB 關鍵指標MongoDB指標
- 實現VR直播的關鍵技術VR
- 新的主鍵和外來鍵的語法
- 與Canalys對話(聯想篇):AI PC的成功是聯想實現更宏大目標的關鍵AI
- openGauss-外來鍵鎖增強
- 工業物聯網閘道器:實現跨地域裝置互操作的關鍵
- 在Spring Data MongoDB中實現關係建模 - spring.ioSpringMongoDB
- Entity Framework 實體載入外來鍵屬性的問題Framework
- Django中ORM外來鍵和表的關係(Django程式設計-4)DjangoORM程式設計