2

私は最近MongoDBを学んでいます。MongoDBはjoinをサポートしていないことがわかりました。MongoDBがこれを選択する理由を知りたいだけですか?

前もって感謝します..

4

3 に答える 3

4
  1. Mongo-リレーショナルデータベースではなく、物理的な関係や制約はありません。
  2. 参加するとスケーラビリティが失われます。

通常、非正規化はSQL結合を置き換えます。

たとえば、stackoverflowで質問とその所有者がいますが、mongodbでは、所有者データを非正規化して結合を回避するのが通常のケースです。

question
{
  _id,
  text,
  user_short :
  {
    id,
    full_name
  }
}

これは確かに更新の複雑さを増すことにつながりますが、データを読み取るときにパフォーマンスが大幅に向上します。また、ほとんどのアプリケーションでは、読み取りは95%で、書き込みは5%以下です。

于 2012-08-30T06:33:13.927 に答える
2

MongoDbは非リレーショナルデータベースだからです。非リレーショナルデータベースは、設計による結合をサポートしていません。

于 2012-08-30T06:32:56.783 に答える
1

これで、Mongo3.2で次のコマンドを使用して実行できます。$lookup

$lookup4つの引数を取る

from:結合を実行する同じデータベース内のコレクションを指定します。fromコレクションをシャーディングすることはできません。

localField:$lookupステージに入力されたドキュメントのフィールドを指定します。$ lookupは、fromコレクションのドキュメントからのlocalFieldとforeignFieldの等価一致を実行します。

foreignField:fromコレクション内のドキュメントのフィールドを指定します。

as:入力ドキュメントに追加する新しい配列フィールドの名前を指定します。新しい配列フィールドには、fromコレクションからの一致するドキュメントが含まれます。

db.Foo.aggregate(
  {$unwind: "$bars"},
  {$lookup: {
    from:"bar",
    localField: "bars",
    foreignField: "_id",
    as: "bar"

   }},
   {$match: {
    "bar.testprop": true
   }}
)
于 2017-01-12T02:45:11.110 に答える