我有两份文件:
应用程序(与show无关)和扫描:
{
application_id: 'xxx'
}
我想按扫描次数排序所有应用程序。
使用SQL,我会做以下几行:
SELECT applications.*, COUNT(scans.*) as scans_count FROM applications
LEFT JOIN scans ON scans.application_id = applications.id
GROUP BY applications.id
ORDER BY scans_count
似乎mongo的聚合框架不允许这样做。
一些选项:
不确定这是否相关,map / reduce有点慢,我需要答案非常快。
不可能,因为我需要全局访问扫描
这可能会有效,但如果有一天我想只计算一些扫描,视情况而定,问题会再次出现
我对mongodb很新,对我的问题最好的解决方案是什么?我的架构是否太关系了?如果是这样,我怎样才能让它变得更好?
答案 0 :(得分:2)
最简单,最灵活的选择是分两步完成:
aggregate
进行scans
查询,以获取application_id
值和扫描计数,按计数排序。find
对applications
进行$in
查询,以获取application_id
的应用程序。您一次只能查询一个集合,因此任何类似连接的内容都需要重新设计架构以获取一个集合中所需的所有内容,或者使用多个查询。