pymongo中集团的操作方法教程

  

  

使用pymongo进行group by操作有两种基本方式,他们都是mongodb的原生命令,于收集对象上调用。

        def聚合(自我,管道,* * kwargs):   def集团(减、自我、关键条件,初步确定=None, * * kwargs):      

<强>示例数据
  

  

演示用的数据为一个订单表,含有以下字段:

  
  

订单   

_id: ObjectID
  用户标识:int
  itemid: int
  数量:int
  时间:,,字符串
  

     

主要任务为:

  
      <李>统计某个时间区间内每个userid的订单数   <李>统计某个时间区间内每组(userid, itemid)共售出多量少李   
  

即分别为:单键分组和多键分组

  


  

  

聚合操作只接受一个列表类型的参数——管道。其每一个元素都是一步操作(舞台)。全部可用的阶段可参见:

  


https://docs.mongodb.com/manual/meta/aggregation-quick-reference/阶段   

  

里油面的阶段是有序且可重复的,mongodb会顺序执行,因此一定要记得把像元匹配这样的阶段放前面。

  

单键分组

        start_time=' 2010-10-10就是'   end_time=' 2010-10-10 23:59:59 '      匹配={   “时间”:{   “美元gte”: start_time,   “$ lte”: end_time,   }   }      groupby=氨晔丁?      组={   “_id”: " $ % s " %(如果其他groupby没有groupby),   “数”:{“美元金额”:1}      }      ret=collection.aggregate (   (   {$匹配:匹配},   {“美元集团”:集团},   ]   )      在在在受潮湿腐烂   [{“_id”: 123年,“数”:500},…]      

集团指美元定了返回数据的格式,其中_id字段是分组的键。

  

        groupby=(“itemid”、“标识”)      组={   “_id”:{关键:(' $ % s ' %键)的关键groupby}或{“没有”:“没有美元”},   “数”:{“美元金额”:“美元金额”}   }      ret=collection.aggregate (   (   {$匹配:匹配},   {“美元集团”:集团},   ]   )      在在在受潮湿腐烂   [{_id: {“itemid”: 111年,“user_id”: 123},“数”:100},…]      

这里与单键分组的区别仅在于_id的类型,改成了一个字典,从而允许多键组合。

  

为了提高通用性,建议始终使用字典的格式。

  

另外,既然字符串和字典都可以做键,那么列表行不行呢?答案是不的行,列表里的元素,(如美元userid)并不会被自动识别为字段,而是仅作一般字符串处理。

  

最后关于聚合中可用的运算操作符,可参见:

  

https://docs.mongodb.com/manual/reference/operator/aggregation/蓄电池
  

  

如其中美元的addToSet也是颇有用处,可以用来实现“统计每个人都买过哪些itemid”这样的功能:

        组={   “_id”:{“标识”:“userid美元”},   “dist_itemids”: {“addToSet美元”:“itemid美元”},   }      

  

相较于聚合的全能,集团是专门处理分组操作的一个命令,因此这个方法的参数也更明确,主要参数为:

  
      <李>键列表,分组的键   <李>条件dict过滤条件   <李>初始dict,初始值   <李>/bson减少字符串。李代码,js的减少函数   
  例:

        关键=(“标识”、“itemid”)   条件={   “时间”:{   “美元gte”: start_time,   “$ lte”: end_time,   }   }   初始={“计数”:0}   减速机=代码(“””   函数(obj,上一页){   上一页。数=上一页。数+ obj.amount   }   ”“”)      ret=集合。集团(关键条件、初始、减速机)      在在在受潮湿腐烂   [{“标识”:110年,“itemid”: 123年,“数”:500.0},…]      

这里的分组数据聚合,是通过减少函数实现的,这个函数与python的减少不同,它不需要返回值,而是直接修改prev参数即可,这个参数会自动代入下一次调用。这可能是js的实现。

  

须注意的是js默认返回浮点数。

  

  

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

pymongo中集团的操作方法教程