Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 使用ISODate优化$group查询_Mongodb_Aggregation Framework - Fatal编程技术网

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分区速度较慢。