pymongo聚合查询后如何统计文档?

pymongo聚合查询后如何统计文档总数?

相关代码

match1 = {'$match': {'regDate': {"$gte": datetime(2018, 6, 1), "$lt": datetime(2018, 6, 30)}}}
lookup = {'$lookup':
              {
                  "from": "recharge",
                  "localField": "_id",
                  "foreignField": "uid",
                  "as": "recharge"
              }
          }
project = {'$project':
               {
                   '_id': 1,
                   'regDate': 1,
                   'recharge.from': 1,
                   'recharge.rechargeDate': 1,
               }
        }
match2 = {'$match': {"recharge.from": "weixin"}}
match3 = {'$match': {"recharge.from": "alipay"}}
match4 = {'$match': {"recharge.rechargeDate": {"$gte": datetime(2018, 6, 1), "$lt": datetime(2018, 6, 30)}}}
pipeline = [match1, lookup, project, match2, match3, match4]
result = collection.aggregate(pipeline)

for i in result:
    pprint.pprint(i)

结果部分信息如下:

{'_id': ObjectId('5b1359c11a6206742ffc3848'),
 'recharge': [{'from': 'regCoupon',
               'rechargeDate': datetime.datetime(2018, 6, 3, 3, 13, 33, 591000)},
              {'from': 'alipay'},
              {'from': 'weixin',
               'rechargeDate': datetime.datetime(2018, 6, 3, 3, 14, 32, 525000)}],
 'regDate': datetime.datetime(2018, 6, 3, 3, 0, 17, 300000)}
{'_id': ObjectId('5b13bc0e1a6206742ffc3960'),
 'recharge': [{'from': 'regCoupon',
               'rechargeDate': datetime.datetime(2018, 6, 3, 9, 59, 55, 503000)},
              {'from': 'alipay'},
              {'from': 'weixin',
               'rechargeDate': datetime.datetime(2018, 6, 3, 14, 43, 16, 430000)},
              {'from': 'weixin',
               'rechargeDate': datetime.datetime(2018, 6, 10, 11, 3, 18, 861000)}],
 'regDate': datetime.datetime(2018, 6, 3, 9, 59, 42, 470000)}
{'_id': ObjectId('5b1419181a6206742ffc3a2d'),
 'recharge': [{'from': 'regCoupon',
               'rechargeDate': datetime.datetime(2018, 6, 3, 16, 36, 46, 138000)},
              {'from': 'weixin',
               'rechargeDate': datetime.datetime(2018, 6, 3, 19, 13, 30, 810000)},
              {'from': 'weixin',
               'rechargeDate': datetime.datetime(2018, 6, 3, 20, 24, 3, 236000)},
              {'from': 'weixin',
               'rechargeDate': datetime.datetime(2018, 6, 4, 1, 48, 56, 870000)},
              {'from': 'alipay'},
              {'from': 'weixin',
               'rechargeDate': datetime.datetime(2018, 7, 10, 2, 59, 1, 594000)},
              {'from': 'weixin',
               'rechargeDate': datetime.datetime(2018, 7, 21, 6, 33, 31, 558000)}],
 'regDate': datetime.datetime(2018, 6, 3, 16, 36, 40, 934000)}
  1. 列表项目可以打印出所有筛选后的列表,总数是多少呢?用$group id要设置什么?
  2. 上述结果中 from除了weixin和alipay还有regCoupon,如何过滤?
  3. 上述结果中 rechargeDate也有显示七月份充值日期的,如何过滤?
阅读 3.8k
1 个回答
match1 = {'$match': {'regDate': regDate}}
lookup = {'$lookup':
              {
                  'from': 'recharge',
                  'localField': '_id',
                  'foreignField': 'uid',
                  'as': 'recharge'
              }
          }
project = {'$project':
               {
                   '_id': 1,
                   'regDate': 1,
                   'recharge.from': 1,
                   'recharge.rechargeDate': 1,
               }
        }
match2 = {'$match': {'recharge.from': 'weixin'}}
match3 = {'$match': {'recharge.from': 'alipay'}}
match4 = {'$match': {'recharge.rechargeDate': {'$gte': starttime, '$lt': endtime}}}
pipeline = [match1, lookup, project, match2, match3, match4]
result = collection_users.aggregate(pipeline)
a = 0
for i in result:
    a=a+1
pprint.pprint(a)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题