MongoDB - 按引用或'Foreign Key'排序(Liftweb,Scala)



我有一个用户,其中包含指向组织的引用字段"o":

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

组织包含一个字段"n":

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

我想要一个按o.n排序的用户列表,最好在Scala/Lift中。

您实际上要求的是JOIN。MongoDB没有JOIN的概念。

从服务器的角度来看,集合根本不知道彼此的存在。有些工具将其抽象出来(如Morphia),但实际上只有两种基本方法可以实现这一点:

  1. 手动连接:加载users,然后加载organizations,合并在一起并连接客户端。
  2. 反规范化:在users集合中存储N字段的副本(并保持同步)。这将使您的查询工作快速,但它会使更新复杂化。

缺少join是MongoDB的基本折衷之一。如果这是一个常见查询或基本查询,则必须执行#1,#2或#3:选择不同的DB。

最新更新