mongodb按条件聚合分页

有一个需求,检索出给定起止日期内,每小时整点或接近整点的一条数据,求助老师无果,翻遍资料终得出以下方法:

 cursor = mongo_client[project_code][collection_name].aggregate([
            {"$match": {"datetime": {"$gte": start_time, "$lte": end_time}}},
            {"$group": {"_id": {"month": {"$month": "$datetime"}, "day": {"$dayOfMonth": "$datetime"},
                                "hours": {"$hour": "$datetime"}},
                        "datetime_t": {"$first": "$datetime"},
                        "equip_info_t": {"$first": "$equip_info"}, }},
        {"$project": {"datetime": {"$dateToString": {"format": "%Y-%m-%d %H:%M:%S", "date": "$datetime_t"}},
                      "_id": 0, }},  # "equip_data":"$equip_info_t"
        {"$sort": {"datetime": 1}},

        {'$facet': {"metadata": [{"$count": "total"}, {"$addFields": {"current_page": page}}],
                    "data": [{"$skip": (page - 1) * size}, {"$limit": size}]}}

    ])

解释:

  1. match,首先根据时间限定范围
  2. group,根据字段datetime(isoDate类型)获取月份,日分,小时,根据月日时组,如果起止日期超过一年,需提取年份。提取需要的信息供下一步选择。
  3. project,设置展示的数据,不要的数据设置为0,如果需要字符串类型的日期,需进一步转换。
  4. sort,对日期进行顺序排序,逆序设置为-1
  5. facet,设置多个输出管道, c o u n t 统 计 数 量 , count统计数量, countaddFields添加新的字段, s k i p 跳 过 多 少 , skip跳过多少, skiplimit限制取多少
  6. 截图
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值