MongoDB - 按引用排序或"外键"(Liftweb,Scala)

Sri*_*Sri 1 scala lift mongodb mongodb-scala

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

> db.users.findOne()
{
"o" : ObjectId("4ec3548544ae1b7234548826")
}
Run Code Online (Sandbox Code Playgroud)

组织包含字段"n":

> db.organisations.findOne()
{
    "n" : "My organization" 
}
Run Code Online (Sandbox Code Playgroud)

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

Gat*_* VP 7

你实际要求的是一个加入.MongoDB没有JOIN的概念.

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

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

缺少JOIN是MongoDB的基本权衡之一.如果这是常见查询或基本查询,则必须执行#1,#2或#3:选择其他数据库.

  • 这已不再是真正的为3.2版:https://docs.mongodb.com/master/reference/operator/aggregation/lookup/#pipe._S_lookup (3认同)