MongoDB - 按引用或“外键”排序(电梯网、斯卡拉)

发布于 2024-12-19 15:46:06 字数 288 浏览 2 评论 0原文

我有一个用户,其中包含一个指向组织的引用字段“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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不及他 2024-12-26 15:46:06

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

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

  1. 手动加入:加载用户,然后加载组织,将它们合并在一起并加入客户端。
  2. 反规范化:将 N 字段的副本存储在 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:

  1. Manual join: load the users, then load the organizations, merge them together and join client-side.
  2. Denormalize: store a copy of the N field inside of the 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文