MongoDB - 按引用或“外键”排序(电梯网、斯卡拉)
我有一个用户,其中包含一个指向组织的引用字段“o”:
> db.users.findOne()
{
"o" : ObjectId("4ec3548544ae1b7234548826")
}
组织包含一个字段“n”:
> db.organisations.findOne()
{
"n" : "My organization"
}
我想要一个按 on 排序的用户列表,最好在 Scala / Lift 中。
I have a user which contains a reference field "o" which points to an organisation:
> db.users.findOne()
{
"o" : ObjectId("4ec3548544ae1b7234548826")
}
Organisations contain a field "n":
> db.organisations.findOne()
{
"n" : "My organization"
}
I want a list of users sorted by o.n, preferably in Scala / Lift.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您实际上要求的是加入。 MongoDB 没有 JOIN 的概念。
从服务器的角度来看,集合根本不了解彼此。有些工具将其抽象化(例如 Morphia),但实际上只有两种基本方法可以实现这一点:
用户
,然后加载组织
,将它们合并在一起并加入客户端。users
集合中(并保持同步)。这将使您的查询快速运行,但会使更新变得复杂。缺乏 JOIN 是 MongoDB 的基本权衡之一。如果这是一个常见查询或基本查询,您必须执行#1、#2 或#3:选择不同的数据库。
What you are effectively asking for is a JOIN. MongoDB has no notion of a JOIN.
From the server's perspective, collections simply don't know about each other. Some tools abstract this away (like Morphia), but there are really only two basic ways to make this happen:
users
, then load theorganizations
, merge them together and join client-side.users
collection (and keep it in sync). This will make your query work fast, but it will complicate updates.This lack of JOINs is one of the fundamental MongoDB trade-offs. If this is a common query or essential query, you either have to do #1, #2 or #3: pick a different DB.