按mongo中的引用计数排序

时间:2013-04-30 12:44:33

标签: mongodb sorting one-to-many

我有两份文件:

应用程序(与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

不确定这是否相关,map / reduce有点慢,我需要答案非常快。

将扫描文档嵌入应用程序

不可能,因为我需要全局访问扫描

在应用程序文档中添加一个字段以跟踪扫描次数

这可能会有效,但如果有一天我想只计算一些扫描,视情况而定,问题会再次出现

我对mongodb很新,对我的问题最好的解决方案是什么?我的架构是否太关系了?如果是这样,我怎样才能让它变得更好?

1 个答案:

答案 0 :(得分:2)

最简单,最灵活的选择是分两步完成:

  1. aggregate进行scans查询,以获取application_id值和扫描计数,按计数排序。
  2. 使用findapplications进行$in查询,以获取application_id的应用程序。
  3. 您一次只能查询一个集合,因此任何类似连接的内容都需要重新设计架构以获取一个集合中所需的所有内容,或者使用多个查询。