2013-12-18 92 views
0

查詢文件有兩個表,如學生和班級:蒙戈:從多收集

SELECT student.name, class.subj 
     FROM student 
     INNER JOIN class 
     ON student.class_id = class.class_id; 

在SQL是好的,但在MongoDB中, 我知道MongoDB的不支持聯接, 但我不想放入一個集合, 我想放入兩個集合並查詢它並返回一個數據。 原因是我想這樣做,請看this

那麼我該怎麼辦?

回答

2

目前Mongodb不支持交叉收集請求和AFAIK沒有計劃做這樣的功能。它與基於文檔的數據庫的整個概念不同。

我們在早期使用Nodejs項目時遇到了與Mongodb相同的問題。我們的解決方案是通過Mongodb的_id參數將子文檔放入另一個集合中,並引用父文檔。它的很大一部分是由Mongoose ORM處理的,但其核心仍然會做兩個不同的請求 - 一個用於檢索父文檔,另一個用於檢索所有子文檔,其中父文檔仍然有一個參數數組,其所有子項的列表爲_id

這是SQL和NoSQL之間的模式設計模式的區別。在SQL中,模式是固定的,並且改變它有時很痛苦,但是通過執行復雜請求的能力,您可以從這個固定模式中受益。在NoSQL中沒有固定的模式,所有的模式都在你的腦海(也許是文檔),你自己也需要遵循它,但是這爲你提供了一個在數據庫級別上的良好速度。

UPDATE:畢竟我們最終將兩個集合合併爲一個。從父文檔查詢子文檔仍然存在一些問題,但它非常簡單,對我們來說沒有多大改變。我建議你看看這個,而不是分成兩個獨立的集合。它還主要依賴於你的數據庫的工作流程,你會做更多的讀取查詢或更多的寫入查詢嗎?使用NoSQL模式,您還需要考慮這些要點。如果更多的閱讀 - 單一收集是一種方式。