私は最近MongoDBを学んでいます。MongoDBはjoinをサポートしていないことがわかりました。MongoDBがこれを選択する理由を知りたいだけですか?
前もって感謝します..
私は最近MongoDBを学んでいます。MongoDBはjoinをサポートしていないことがわかりました。MongoDBがこれを選択する理由を知りたいだけですか?
前もって感謝します..
通常、非正規化はSQL結合を置き換えます。
たとえば、stackoverflowで質問とその所有者がいますが、mongodbでは、所有者データを非正規化して結合を回避するのが通常のケースです。
question
{
_id,
text,
user_short :
{
id,
full_name
}
}
これは確かに更新の複雑さを増すことにつながりますが、データを読み取るときにパフォーマンスが大幅に向上します。また、ほとんどのアプリケーションでは、読み取りは95%で、書き込みは5%以下です。
MongoDbは非リレーショナルデータベースだからです。非リレーショナルデータベースは、設計による結合をサポートしていません。
これで、Mongo3.2で次のコマンドを使用して実行できます。$lookup
$lookup
4つの引数を取る
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
}}
)