我有一个用户,其中包含指向组织的引用字段"o":
> db.users.findOne()
{
"o" : ObjectId("4ec3548544ae1b7234548826")
}
组织包含一个字段"n":
> db.organisations.findOne()
{
"n" : "My organization"
}
我想要一个按o.n排序的用户列表,最好在Scala/Lift中。
您实际上要求的是JOIN。MongoDB没有JOIN的概念。
从服务器的角度来看,集合根本不知道彼此的存在。有些工具将其抽象出来(如Morphia),但实际上只有两种基本方法可以实现这一点:
-
手动连接:加载
users
,然后加载organizations
,合并在一起并连接客户端。 -
反规范化:在
users
集合中存储N字段的副本(并保持同步)。这将使您的查询工作快速,但它会使更新复杂化。
缺少join是MongoDB的基本折衷之一。如果这是一个常见查询或基本查询,则必须执行#1,#2或#3:选择不同的DB。