Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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中按另一个字段分组时聚合时间序列数据?_Mongodb_Pymongo - Fatal编程技术网

如何在MongoDB中按另一个字段分组时聚合时间序列数据?

如何在MongoDB中按另一个字段分组时聚合时间序列数据?,mongodb,pymongo,Mongodb,Pymongo,我有一些文件看起来像: {u'memory_virtual': {u'percent': 55.6}, u'name': u'Device #1', u'datetime': datetime.datetime(2019, 2, 16, 17, 52, 18)} {u'memory_virtual': {u'percent': 55.6}, u'name': u'Device #2', u'datetime': datetime.datetime(2019, 2, 16, 17, 52, 16)

我有一些文件看起来像:

{u'memory_virtual': {u'percent': 55.6}, u'name': u'Device #1', u'datetime': datetime.datetime(2019, 2, 16, 17, 52, 18)}
{u'memory_virtual': {u'percent': 55.6}, u'name': u'Device #2', u'datetime': datetime.datetime(2019, 2, 16, 17, 52, 16)}
{u'memory_virtual': {u'percent': 55.7}, u'name': u'Device #1', u'datetime': datetime.datetime(2019, 2, 16, 17, 46, 56)}
{u'memory_virtual': {u'percent': 55.7}, u'name': u'Device #2', u'datetime': datetime.datetime(2019, 2, 16, 17, 46, 54)}
{u'memory_virtual': {u'percent': 55.7}, u'name': u'Device #1', u'datetime': datetime.datetime(2019, 2, 16, 17, 41, 34)}
{u'memory_virtual': {u'percent': 55.7}, u'name': u'Device #2', u'datetime': datetime.datetime(2019, 2, 16, 17, 41, 32)}
我一直在使用以下小组阶段将数据聚合为15分钟的时间间隔:

{
    '$group': {
        "_id": {
            "$toDate": {
                "$subtract": [
                    {"$toLong": "$datetime"},
                    {"$mod": [{"$toLong": "$datetime"}, 1000 * 60 * 15]}
                ]
            }
        },
        'mean': {'$avg': '$memory_virtual.percent'}
    },
}
输出如下所示:

{u'_id': datetime.datetime(2019, 2, 16, 18, 0), u'mean': 26.10909090909091}
{u'_id': datetime.datetime(2019, 2, 16, 17, 45), u'mean': 28.98695652173913}
{u'_id': datetime.datetime(2019, 2, 16, 18, 0), u'name': 'Device #1', u'mean': 26}
{u'_id': datetime.datetime(2019, 2, 16, 18, 0), u'name': 'Device #2', u'mean': 27}
{u'_id': datetime.datetime(2019, 2, 16, 17, 45), u'name': 'Device #1', u'mean': 27}
{u'_id': datetime.datetime(2019, 2, 16, 17, 45), u'name': 'Device #2', u'mean': 28}
我的问题是,如何通过“名称”字段将其分组?这样我就可以得到如下输出:

{u'_id': datetime.datetime(2019, 2, 16, 18, 0), u'mean': 26.10909090909091}
{u'_id': datetime.datetime(2019, 2, 16, 17, 45), u'mean': 28.98695652173913}
{u'_id': datetime.datetime(2019, 2, 16, 18, 0), u'name': 'Device #1', u'mean': 26}
{u'_id': datetime.datetime(2019, 2, 16, 18, 0), u'name': 'Device #2', u'mean': 27}
{u'_id': datetime.datetime(2019, 2, 16, 17, 45), u'name': 'Device #1', u'mean': 27}
{u'_id': datetime.datetime(2019, 2, 16, 17, 45), u'name': 'Device #2', u'mean': 28}

我不确定这是否重要,但作为参考,我正在使用pymongo。

您需要在
$group
阶段的
\u id
中也包括

{
    "$group": {
        "_id": {
            date: {
                "$toDate": {
                    "$subtract": [
                        {"$toLong": "$datetime"},
                        {"$mod": [{"$toLong": "$datetime"}, 1000 * 60 * 15]}
                    ]
                }
            },
            name: "$name"
        },
        "mean": {"$avg": "$memory_virtual.percent"}
    }
}