2010-01-26 144 views
27

我無法理解如何在MongoDB中過濾嵌入式文檔,並開始認爲我應該使用關係關聯,但在文檔存儲上下文中感覺不對。在MongoDB中過濾嵌入式文檔

具有典型的博客/評論系統堅持,我有一個blogs集合,每個blog有許多comments。評論將作爲嵌入式文檔存儲在博客文檔中。

這是非常簡單的過濾我blogs集,但爲了篩選我comments嵌入在每個blog,我有他們全部加載到內存中(檢索所有進入一個Ruby數組),並通過每個註釋循環,返回符合特定標準的。

我使用點符號過濾嵌入式文檔的工作失敗,並將所有子文檔帶回。

有沒有更好的方式讓MongoDB爲我過濾這些問題,還是應該讓我自己去關係關聯? (拉回所有嵌入式文檔並且手動過濾將長期過於緊張)

回答

22

目前沒有辦法按照您描述的方式過濾嵌入式文檔。使用點符號可以匹配嵌入式文檔,但是整個文檔,父文檔和全部文檔仍將返回。也可以選擇哪些字段將被返回,但這也不能真正幫助您的情況。

我們有一個「虛擬集合」的例子,它將實現所需的功能;隨意就可以投票:

http://jira.mongodb.org/browse/SERVER-142

在此期間,你應該把意見作爲自己的收藏。一般來說,如果您需要自己處理給定的數據集,請將其作爲集合。如果更好地將其作爲其他設置的一部分,最好嵌入。

+0

謝謝kb - 已經與收集在一起,似乎到目前爲止工作還行;只需要對它進行壓力測試。 – kez 2010-01-26 16:08:14

+0

很酷。它應該仍然是有效的。 – 2010-01-26 18:35:02

+13

對於這個非常需要的要求,「虛擬館藏」不是一個很大的矯枉過正嗎?我只是好奇 - 是否只能返回一個沒有開發的特定嵌入式文檔,因爲它不需要,或者因爲它很複雜? – idophir 2011-11-16 21:57:02