如何使用3个集合之间的关系进行mongoDB查询

我有这3个mongoDB集合:</ p>

client_results </ p> \ n

  [
'resultId':1,
'clientId':'client00',

],
[
'erderId':2,
'clientId':' client00' ,
]的,
</代码> </ PRE>

结果</ p>

 <代码> [
'id':1,
'的siteID':5
]的,
[
'id ':2,
'siteID':6
]
上</代码> </ PRE>

位点</ p>

 <代码> [
'id ':5,
'language': 'AR'
],
[
'id ':6,
'language' :'en'
]
</ code> </ pre>

我如何在client.site.language ='en'中获取client_results?

in MYSQL查询将是这样的:</ p>

 选择cr.id,cr.clientId来自client_results cr 
left join r
on r.id = cr.resultId
left 在s.id = r.siteID
where s.language ='en';
</ code> </ pre>

加入网站s
但在mongoDB中如何进行此查询? </ p>

谢谢</ p>
</ div>

展开原文

原文

I have these 3 mongoDB collections :

client_results

[
 'resultId':1,
 'clientId':'client00',
],
[
 'resultId':2,
 'clientId':'client00',
],

results

[
'id':1,
'siteID':5
],
[
'id':2,
'siteID':6
]

sites

[
'id':5,
'language':'ar'
],
[
'id':6,
'language':'en'
]

how I can get client_results where results.site.language = 'en' ? in MYSQL query will like this :

select cr.id, cr.clientId from client_results cr
left join results r
  on r.id = cr.resultId 
left join site s
  on s.id = r.siteID
where s.language = 'en';

but in mongoDB how I can make this query ?

thanks

duandou9931
duandou9931 $lookup不允许您添加条件。似乎你需要一个更好的数据库,一个关系数据库。:)
3 年多之前 回复
douluan1533
douluan1533 谢谢Styvane..我坚持“我怎么能用$lookup来调整条件”,我需要site.language等于'en'的结果。
3 年多之前 回复
dsfsfdsf4544
dsfsfdsf4544 MongoDB版本?如果是3.2,请尝试使用$lookup查找并告诉我们您的卡在哪里?
3 年多之前 回复
douju7503
douju7503 请将您到目前为止尝试的内容添加到帖子中。
3 年多之前 回复

1个回答

In mongodb it is little hectic to do joins,as mongodb was not meant to do joins,the main idea behind mongodb was to put all you need in one document,but there are some limitation,we cant put whole other document in another,anyways here is your answer,$look is like left outer join,But problem in this solution is there i have unwind the first table to join another,in this case if there is no first join there would be no second join as well, You can use a $project stage and put a _id variable in it,play with it you will get the desired result

db.client_results.aggregate([
                            {"$lookup" : 
                             {
                              from : results,
                              localField : resultId,
                              foreignField: id,
                              as : "resultTable"
                            }
                          },
                      {"$unwind" : "$resultTable"},
                      {"$lookup" : 
                         {
                          from : sites,
                          localField : "resultTable.siteID",
                          foreignField: id,
                          as : "siteTable"
                         }
                       },
                      {"$unwind" : "$siteTable"},
                      {$match : {"siteTable.language" : "en"}} // <-- only en language
                        ])
duan36000
duan36000 很多人都非常感谢,这是有效的
3 年多之前 回复
dongmi19720408
dongmi19720408 检查我更新的答案
3 年多之前 回复
dsi37923
dsi37923 非常感谢#Parshuram,这很好,但没有条件,有没有办法把条件像“site.language = en”,我的意思是我只需要结果,网站语言是'en'...再次感谢
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问