Mongodb 使用ISODate优化$group查询
我必须得到一个月和一年,在那里花费了最大的成本。 我使用Mongodb 使用ISODate优化$group查询,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我必须得到一个月和一年,在那里花费了最大的成本。 我使用$group按年/月日期格式对它们进行分组 db.times.aggregate( [{ $group: { _id: { $dateToString: { format: "%Y/%m", date: "$date" } }, total_cost: {
$group
按年/月日期格式对它们进行分组
db.times.aggregate(
[{
$group: {
_id: {
$dateToString: {
format: "%Y/%m",
date: "$date"
}
},
total_cost: {
$sum: "$cost_spent"
}
}
}, {
$sort: {
"total_cost": -1
}
}, {
$limit: 1
}])
两个问题:
有没有更快的方法来解析我的ISODate$date
并将其部分用作$group
\u id
?(尝试了$month
和$year
,速度较慢。)
有没有办法告诉
$group
排序了$date
(例如,由于索引)$substr
操作符将季度/年月值从ISODate(“2019-01-01T18:30:00Z”)中分离为年子字符串和年月子字符串
db.times.aggregate(
[{
$group: {
_id: {
$substr: ['$date', 0, 7]
},
total_cost: {
$sum: "$cost_spent"
}
}
}, {
$sort: {
"total_cost": -1
}
}, {
$limit: 1
}])
如许多调查所示,在这种情况下,最佳性能和速度只能给出字符串日期:
$substr: ['$str_date', 0, 7]
它的速度大约是它的两倍
$substr: ['$iso_date', 0, 7]
它能工作(没料到),但速度慢了约0.5秒。或者-{$group:{{year:{$year:{$date},month:{$month:'$date}},总成本:{$sum:$cost:$cost:$cost}}}
和{$project:{{id:{$concat:[{$toString:$toString:$id.year'},},{$year'},},{$toString:$date month'},toString:$toString:$id.month},总成本:{$nopu code}。正如我在描述中提到的,$month和$year分区速度较慢。