【问题标题】:Group by date to get count of hits for a day, for last 7 days and for a months按日期分组以获取一天、过去 7 天和一个月的点击次数
【发布时间】:2020-05-15 09:16:11
【问题描述】:
[{'_id': '5ebe39e41e1729d90de',
  'modelId': '5ebe3536c289711579',
  'lastAt': datetime.datetime(2020, 5, 15, 6, 42, 44, 79000),
  'proId': '5ebe3536c2897115793dccfb',
  'genId': '5ebe355ac2897115793dcd04'},
 {'_id': '5ebe3a0d94fcb800fa474310', 
  'modelId': '5ebe3536c289711579',
  'proId': '5ebe3536c2897115793d', 
  'genId': '5ebe355ac2897115793',
  'lastAt': datetime.datetime(2020, 5, 15, 6, 43, 25, 105000)}]

我想计算一天、过去 7 天和一个月的点击次数。由于型号相同,所以我想要基于lastAtmodelId的计数。

我尝试了聚合、分组函数。

【问题讨论】:

    标签: python mongodb aggregate pymongo


    【解决方案1】:

    这是纯粹的 Mongo 方法,试试下面的代码:

    收藏:

    [
      {
        "_id": "5ebe39e41e1729d90de",
        "modelId": "5ebe3536c289711579",
        "lastAt": ISODate("2020-05-13T06:42:44.000Z"),
        "proId": "5ebe3536c2897115793dccfb",
        "genId": "5ebe355ac2897115793dcd04"
      },
      {
        "_id": "5ebe3a0d94fcb800fa474310",
        "modelId": "5ebe3536c289711579",
        "proId": "5ebe3536c2897115793d",
        "genId": "5ebe355ac2897115793",
        "lastAt": ISODate("2020-05-15T12:42:25.000Z")
      },
      {
        "_id": "5ebe3a0d94474310",
        "modelId": "5ebe3536c289711579",
        "proId": "5ebe3536c2897115793d",
        "genId": "5ebe355ac2897115793",
        "lastAt": ISODate("2020-04-19T06:42:25.000Z")
      }
    ]
    

    查询:

    var now = new Date()
    var day1 = new Date(now - (1000 * 60 * 60 * 24 * 1))
    var day7 = new Date(now - (1000 * 60 * 60 * 24 * 7))
    var day30 = new Date(now - (1000 * 60 * 60 * 24 * 30))
    
    db.test7.aggregate([
      {
      $group: {
        _id: null,
        day: {
          $sum: {
            $cond:[{$and: [{$gt: ['$lastAt', day1]},{$lte: ['$lastAt', now]}]}, 1, 0]
          }
        },
        day7: {
          $sum: {
            $cond:[{$and: [{$gt: ['$lastAt', day7]},{$lte: ['$lastAt', day1]}]}, 1, 0]
          }
        },
        day30: {
          $sum: {
            $cond:[{$and: [{$gt: ['$lastAt', day30]},{$lte: ['$lastAt', day7]}]}, 1, 0]
          }
        }
      }
      },
      {
        $project: {
          _id:0
        }
      }
    ])
    

    输出:

    { "day" : 1, "day7" : 1, "day30" : 1 }
    

    注意:您可以轻松转换为 PyMongo 语句,如果遇到困难,请告诉我。

    【讨论】:

    • 如果我在以下加密形式的集合中“计数”,我如何提取每天的计数{“_id”:“5ebe3a0d94474310”,“modelId”:“5ebe3536c289711579” ,“proId”:“5ebe3536c2897115793d”,“genId”:“5ebe355ac2897115793”,“lastAt”:ISODate(“2020-04-19T06:42:25.000Z”,“count”:“AB”)}
    • 这超出了这个问题的范围,你能再发一个吗?
    • 感谢回复标题为“pymongo 和 Mongodb 的聚合函数用于计数”的帖子
    • 万一,你看帖子了吗? @ngShravil.py
    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    • 2018-10-10
    相关资源
    最近更新 更多