鍍金池/ 問答/Python  Linux  數(shù)據(jù)庫/ pymongo聚合查詢后如何統(tǒng)計(jì)文檔?

pymongo聚合查詢后如何統(tǒng)計(jì)文檔?

pymongo聚合查詢后如何統(tǒng)計(jì)文檔總數(shù)?

相關(guān)代碼

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)

結(jié)果部分信息如下:

{'_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. 列表項(xiàng)目可以打印出所有篩選后的列表,總數(shù)是多少呢?用$group id要設(shè)置什么?
  2. 上述結(jié)果中 from除了weixin和alipay還有regCoupon,如何過濾?
  3. 上述結(jié)果中 rechargeDate也有顯示七月份充值日期的,如何過濾?
回答
編輯回答
寫榮
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)
2017年9月24日 02:41