我有一個屬於用戶的Posts文檔,並且用戶具有:approved
屬性。我如何使用Mongodb s.t來查詢我的帖子。我只有那些用戶有:approved => true
?根據父母的屬性查詢Mongodb集合
我可以寫一個循環來創建一個新的數組,但這似乎效率低下。
我有一個屬於用戶的Posts文檔,並且用戶具有:approved
屬性。我如何使用Mongodb s.t來查詢我的帖子。我只有那些用戶有:approved => true
?根據父母的屬性查詢Mongodb集合
我可以寫一個循環來創建一個新的數組,但這似乎效率低下。
MongoDB沒有任何連接的概念。
您已在評論中聲明Posts
和Users
是單獨的集合,但您的查詢明確涉及來自兩個集合的數據,這意味着會有聯接。
我可以寫一個循環創建一個新的數組,但這似乎效率低下。
SQL中的連接操作基本上是發生在服務器上的循環。在服務器端沒有加入支持,你必須自己創建。
請注意,許多庫(如Morphia)實際上都具有內置的某些功能。你正在使用可能有這種支持的Mongoid,但你必須做一些狩獵。
想想最簡單的方法是查詢被批准的用戶的唯一用戶ID,然後查詢發佈者的user_id位於該組中的帖子文檔。
正如Rubish所說,您可以通過在郵件文檔中添加批准的字段來取消規範化。當用戶的審批狀態被切換(他們被批准或未批准)時,對帖子集合進行更新,對於該用戶的所有帖子,您可以切換非正規化批准字段。
使用非規格化方法可以讓您執行一個查詢而不是兩個查詢(簡化最常見情況下的邏輯),並且不需要太多的維護工作。
讓我知道這是否合理。
'Posts'和'Users'是兩個集合,還是'Posts'是'User'文檔中的一個值?這裏的答案將取決於結構。 –
兩個集合。 '帖子'屬於用戶,但是是一個獨立的集合。 – Kirill
在mongodb中,您一次只能查詢一個集合。沒有聯接。這意味着你不能直接詢問你的問題,但是你可以將批准的字段非規範化以包含在帖子中,然後編寫一個查詢從批准的用戶中檢索帖子。 – rubish