首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按mongodb中的mongodate分组

按mongodb中的mongodate分组
EN

Stack Overflow用户
提问于 2017-08-15 13:15:50
回答 1查看 53关注 0票数 0

我的插入数据是

代码语言:javascript
复制
   {    "_id" : ObjectId("5992e6f52479d56b0b2709bf"), 
        "TIMESTAMP" : ISODate("2017-08-15T12:19:25.680+0000"), 
        "RECORD" : 20507361.0, 
        "BattV_Min" : 11.9, 
        "SEVolt" : 0.0
    }

我对获取日期的查询是

代码语言:javascript
复制
        $collection1 = $db->tablename;
        $filter1 = array('timestamp' => array('$gte' => $acst1, '$lte' => $acst2));
        $options1 = array('projection' => array('_id' => 0,'temperature' => 1,timestamp => 1));
        $oresult = $collection1->find($filter1,$options1);

我正在获得数十亿个数据,所以我想使用逐组的方法来优化我的查询,就像如果我的数据低于70000,我将按秒分组,如果我的数据范围在70000到100000之间,而不是按分钟、按时间和一天分组的话。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-28 05:47:08

您可以使用聚合函数在mongodb中使用group,而不是按需要使用日期格式的项目,如果需要列值,也可以使用$addToSet函数和平均值使用avg函数的项目。

代码语言:javascript
复制
$collection1 = $db->tablename;
                $oresult = $collection1->aggregate([
                                [
                                    '$match' => array(TIMESTAMP => array('$gte' => $acst1, '$lte' => $acst2))
                                ],
                                [
                                    '$project' => [
                                    'year'  => ['$year' =>'TIMESTAMP'],
                                        'month' => ['$month' => '$TIMESTAMP'],
                                        'day'   => ['$dayOfMonth' => '$TIMESTAMP'],
                                        'hour'  => ['$hour' => '$TIMESTAMP'],
                                        'minute'   => ['$minute' => '$TIMESTAMP'],
                                        'second'   => ['$second' => '$TIMESTAMP'],
                                        'millisecond'   => ['$millisecond' => '$TIMESTAMP'],
                                            'value'   => '$BattV'

                                    ]
                                ],
                                [
                                    '$group' => [
                                        '_id'    => [
                                            'year'  => '$year',
                                            'month' => '$month',
                                            'day'   => '$day',
                                            'hour'  => '$hour',
                                            'minute'   => '$minute',
                                            'second' => '$second',
                                            'millisecond' => '$millisecond'

                                        ],
                                        'count'  => ['$sum' => 1],
                                        'values' => ['$addToSet' => '$value']
                                    ]
                                ],
                                 [
                                    '$sort' => ['_id' => 1]
                                ],
                                [
                                    '$project' => [
                                        'a' => '$count',
                                        'new' =>  ['$avg' => '$values'],
                                        'y' => [
                                            '$concat' => [
                                                ['$substr' => ['$_id.year', 0, 4]],
                                                '-',
                                                [
                                                    '$cond' => [
                                                        ['$lte' => ['$_id.month', 9]],
                                                        [
                                                            '$concat' => [
                                                                '0',
                                                                ['$substr' => ['$_id.month', 0, 2]],
                                                            ]
                                                        ],
                                                        ['$substr' => ['$_id.month', 0, 2]]
                                                    ]
                                                ],
                                                '-',
                                                [
                                                    '$cond' => [
                                                        ['$lte' => ['$_id.day', 9]],
                                                        [
                                                            '$concat' => [
                                                                '0',
                                                                ['$substr' => ['$_id.day', 0, 2]],
                                                            ]
                                                        ],
                                                        ['$substr' => ['$_id.day', 0, 2]]
                                                    ]
                                                ],
                                                ' ',
                                                [
                                                    '$cond' => [
                                                        ['$lte' => ['$_id.hour', 9]],
                                                        [
                                                            '$concat' => [
                                                                '0',
                                                                ['$substr' => ['$_id.hour', 0, 2]],
                                                            ]
                                                        ],
                                                        ['$substr' => ['$_id.hour', 0, 2]]
                                                    ]
                                                ],
                                                ':',
                                                [
                                                    '$cond' => [
                                                        ['$lte' => ['$_id.minute', 9]],
                                                        [
                                                            '$concat' => [
                                                                '0',
                                                                ['$substr' => ['$_id.minute', 0, 2]],
                                                            ]
                                                        ],
                                                        ['$substr' => ['$_id.minute', 0, 2]]
                                                    ]
                                                ],
                                                ':',
                                                [
                                                    '$cond' => [
                                                        ['$lte' => ['$_id.second', 9]],
                                                        [
                                                            '$concat' => [
                                                                '0',
                                                                ['$substr' => ['$_id.second', 0, 2]],
                                                            ]
                                                        ],
                                                        ['$substr' => ['$_id.second', 0, 2]]
                                                    ]
                                                ],
                                                '.',
                                                [
                                                    '$cond' => [
                                                        ['$lte' => ['$_id.millisecond', 9]],
                                                        [
                                                            '$concat' => [
                                                                '0',
                                                                ['$substr' => ['$_id.millisecond', 0, 1]],
                                                            ]
                                                        ],
                                                        ['$substr' => ['$_id.millisecond', 0, 1]]
                                                    ]
                                                ]

                                            ]
                                        ],
                                    ]
                                ]
                            ]
                        );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45693654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档