我有这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中如何进行此查询?
感谢
答案 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
])