【发布时间】:2013-03-19 07:53:40
【问题描述】:
我正在评估 MongoDB 聚合框架是否适合我们的需求,因为我们目前在 SQL Server 之上运行。我很难执行特定查询:
假设我有以下伪记录(建模为 sql 表中的列和 mongodb 集合中的完整文档)
{
name: 'A',
timespent: 100,
},
{
name: 'B',
timespent: 200,
},
{
name: 'C',
timespent: 300,
},
{
name: 'D',
timespent: 400,
},
{
name: 'E',
timespent: 500,
}
我想将时间字段分组到范围中并计算出现次数,这样我就会得到例如以下伪记录:
results{
0-250: 2,
250-450: 2,
450-650: 1
}
请注意,这些范围(250、450 和 650)是动态的,用户可能会随着时间的推移而改变。在 SQL 中,我们使用以下内容提取结果:
select range, COUNT(*) as total from (
select case when Timespent <= 250 then '0-250'
when Timespent <= 450 then '200-450'
else '450-600' end as range
from TestTable) as r
group by r.range
再次注意,此 sql 是由我们的应用程序动态构建的,以适应任何时候可用的特定范围。
我正在努力在 mongodb 聚合框架中找到合适的结构来执行此类查询。我可以通过在管道中插入 $match 来查询单个范围的结果(即获取单个范围的结果),但我无法理解如何在单个管道查询中提取所有范围及其计数。
【问题讨论】:
-
这个链接可能对你有帮助stackoverflow.com/questions/8945766/…
标签: mongodb aggregation-framework