2

組織を指す参照フィールド「o」を含むユーザーがいます。

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

組織にはフィールド「n」が含まれています。

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

できればScala/Liftでソートされたユーザーのリストが欲しいです。

4

1 に答える 1

8

あなたが効果的に求めているのはJOINです。MongoDB には JOIN の概念がありません。

サーバーの観点からは、コレクションは単にお互いを認識していません。これを抽象化するツールもありますが (Morphia など)、これを実現する基本的な方法は 2 つしかありません。

  1. 手動結合: をロードしてusersから をロードしorganizations、それらをマージしてクライアント側で結合します。
  2. Denormalize : N フィールドのコピーをusersコレクション内に格納します (そして同期を維持します)。これにより、クエリは高速に動作しますが、更新が複雑になります。

この JOIN の欠如は、MongoDB の基本的なトレードオフの 1 つです。これが一般的なクエリまたは重要なクエリである場合は、#1、#2、または #3 のいずれかを実行する必要があります: 別の DB を選択します。

于 2011-12-05T08:36:00.147 に答える