2011-12-05 56 views
1

我有一個包含一個參考字段「O」,它指向機構的用戶:MongoDB的 - 通過參考或「外鍵」(Liftweb,斯卡拉)排序

> db.users.findOne() 
{ 
"o" : ObjectId("4ec3548544ae1b7234548826") 
} 

組織包含一個字段,「N」 :

> db.organisations.findOne() 
{ 
    "n" : "My organization" 
} 

我想要一個按用戶排序的用戶列表,最好在Scala/Lift中。

+1

這是行不通的。如果您可以選擇所有用戶,則可以對應用程序端進行排序,否則您可能需要查看非規範化並在用戶記錄中複製組織名稱。 – Thilo

+0

哎呀..這是不幸的..: -/ – Sri

回答

6

你實際要求的是一個JOIN。 MongoDB沒有JOIN的概念。

從服務器的角度來看,收藏根本不瞭解對方。有些工具摘要遠(如嗎啡),但實際上只有兩種基本的方式來實現這一目標:

  1. 手冊加入:加載users,然後加載organizations,把它們合併起來,並加入客戶端 - 側。
  2. 非規範化:在users集合(並保持同步)內存儲N字段的副本。這將使您的查詢工作更快,但會使更新複雜化。

這種JOIN的缺乏是MongoDB的基本權衡之一。如果這是一個常見的查詢或基本查詢,則您必須執行#1,#2或#3:選擇另一個數據庫。

+0

或#4:找到一種方式讓你的應用程序沒有排序工作。 – Thilo

+3

從版本3.2開始,這不再是正確的:https://docs.mongodb.com/master/reference/operator/aggregation/lookup/#pipe._S_lookup – Madbreaks