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

时间:2016-11-16 20:35:07

标签: php mongodb relational-database

我有这3个mongoDB集合:

client_results

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

结果

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

位点

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

我如何获得client_results where results.site.language =' en' ? 在MYSQL查询中会这样:

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';

但在mongoDB中如何进行此查询?

感谢

1 个答案:

答案 0 :(得分:0)

在mongodb中加入连接有点忙乱,因为mongodb并不打算做连接,mongodb背后的主要思想是把你需要的所有东西都放在一个文档中,但是有一些限制,我们不能把其他整个文档放进去另外,反正这里是你的答案,$ look就像是左外连接,但是这个解决方案中的问题是我已经放松了第一个表加入另一个表,在这种情况下如果没有第一个连接就没有第二个连接也是如此, 您可以使用$ project阶段并在其中放置一个_id变量,使用它可以获得所需的结果

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
                        ])