1

我有两个文件:

应用程序(与显示无关)和扫描:

{
  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 还很陌生,我的问题的最佳解决方案是什么?我的模式是否过于相关?如果是这样,我怎样才能使它变得更好?

4

1 回答 1

2

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

  1. 获取值和扫描计数的aggregate查询,按计数排序。scansapplication_id
  2. find关于applications使用$in来获取那些application_ids的应用程序的查询。

您一次只能查询一个集合,因此任何类似连接的操作都需要重新设计架构以在一个集合中获取您需要的所有内容,或者使用多个查询。

于 2013-04-30T13:14:41.253 回答