、あなたはパラメータにみとめテーブルを結合することができます。これは、複数回連鎖できるためです。
ステップ1:リンクのすべてのテーブル
$検索 -
$がくつろぐクエリ内の各テーブルに1 - データが正しくdenormalisedされているので、他の配列に包まれ
Pythonコード..
db.LeftTable.aggregate([
# connect all tables
{"$lookup": {
"from": "RightTable",
"localField": "ID",
"foreignField": "ID",
"as": "R"
}},
{"$unwind": "R"}
# {"$lookup": {
# "from": "TopTable",
# "localField": "ID",
# "foreignField": "ID",
# "as": "T"
# }},
# {"$unwind": "T"},
])
ステップ2:すべての条件文を定義し
$プロジェクト:ここでは、すべての条件文、プラスあなたが選択したいすべての変数を定義します。
Pythonのコード..
db.LeftTable.aggregate([
# connect all tables
{"$lookup": {
"from": "RightTable",
"localField": "ID",
"foreignField": "ID",
"as": "R"
}},
{"$unwind": "R"},
# {"$lookup": {
# "from": "TopTable",
# "localField": "ID",
# "foreignField": "ID",
# "as": "T"
# }},
# {"$unwind": "T"},
# define conditionals + variables
{"$project": {
"midEq": {"$eq": ["$MID", "$R.MID"]},
# "midGt": {"$gt": ["$MID", "$T.MID"]},
"ID": 1, "MOB": 1, "MID": 1
}}
])
ステップ3:すべての条件文
$マッチに参加 - ORまたはANDなどが挙げられる。これらの倍数がある場合もあります使用してすべての条件に参加。
$プロジェクト:未定義のすべての条件文
Pythonのコード
...
db.LeftTable.aggregate([
# connect all tables
{"$lookup": {
"from": "RightTable",
"localField": "ID",
"foreignField": "ID",
"as": "R"
}},
{"$unwind": "$R"},
# {"$lookup": {
# "from": "TopTable",
# "localField": "ID",
# "foreignField": "ID",
# "as": "T"
#}},
#{"$unwind": "$T"},
# define conditionals + variables
{"$project": {
"midEq": {"$eq": ["$MID", "$R.MID"]},
# "midGt": {"$gt": ["$MID", "$T.MID"]},
"ID": 1, "MOB": 1, "MID": 1
}},
# join all conditionals
{"$match": {
"$and": [
{"R.TIM": {"$gt": 0}},
{"MOB": {"$exists": True}},
{"midEq": {"$eq": True}},]
}},
# undefine conditionals
{"$project": {
"midEq": 0,
# "midGt": 0
}}
])
かなり多くのテーブル、条件文の任意の組み合わせと合流するが、この方法で行うことができます。
これは良い出発点です。https://www.mongodb.com/blog/post/joins-and-other-aggregation-enhancements-coming-in-mongodb-3-2-part-1-of -3-introduction – Barney
はすでに上記の質問の一部を構築するのに役立つ投稿を参照しました。この投稿は、私が今探している複数のキーに参加することについて話していません。 –
これはmongoDBではできませんか? –