最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pymongo中g(shù)roup by的操作方法教程

 更新時(shí)間:2019年03月22日 10:42:54   作者:lionets  
這篇文章主要給大家介紹了關(guān)于pymongo中g(shù)roup by的操作方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用pymongo具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

使用 pymongo 進(jìn)行 group by 操作有兩種基本方式,他們都是 mongodb 的原生命令,于 Collection 對象上調(diào)用。

def aggregate(self, pipeline, **kwargs):
def group(self, key, condition, initial, reduce, finalize=None, **kwargs):

示例數(shù)據(jù)

演示用的數(shù)據(jù)為一個(gè)訂單表,含有以下字段:

Order

_id: ObjectID
userid: int
itemid: int
amount: int
time:   string

主要任務(wù)為:

  • 統(tǒng)計(jì)某個(gè)時(shí)間區(qū)間內(nèi)每個(gè) userid 的訂單數(shù)
  • 統(tǒng)計(jì)某個(gè)時(shí)間區(qū)間內(nèi)每組 (userid, itemid) 共售出多少 amount

即分別為:單鍵分組和多鍵分組

aggregate

聚合操作只接受一個(gè)列表類型的參數(shù) —— pipeline。其每一個(gè)元素都是一步操作(stage)。全部可用的 stage 可參見:

https://docs.mongodb.com/manual/meta/aggregation-quick-reference/#stages

注意 pipline 里面的 stage 是有序且可重復(fù)的,mongodb 會(huì)順序執(zhí)行,因此一定要記得把像 $match 這樣的 stage 放前面。

單鍵分組

start_time = '2010-10-10 00:00:00'
end_time = '2010-10-10 23:59:59'

match = {
 'time': {
 '$gte': start_time,
 '$lte': end_time,
 }
}

groupby = 'userid'

group = {
 '_id': "$%s" % (groupby if groupby else None),
 'count': {'$sum': 1}

}

ret = collection.aggregate(
 [
 {'$match': match},
 {'$group': group},
 ]
)

>>> ret
[{'_id': 123, 'count': 500}, ...]

$group 指定了返回?cái)?shù)據(jù)的格式,其中 _id 字段是分組的鍵。

多鍵分組

groupby = ['itemid', 'userid']

group = {
 '_id': {key: ('$%s' % key) for key in groupby} or {'None': '$None'},
 'count': {'$sum': '$amount'}
}

ret = collection.aggregate(
 [
 {'$match': match},
 {'$group': group},
 ]
)

>>> ret
[{'_id': {'itemid': 111, 'user_id': 123}, 'count': 100}, ...]

這里與單鍵分組的區(qū)別僅在于 _id 的類型,改成了一個(gè)字典,從而允許多鍵組合。

為了提高通用性,建議始終使用字典的格式。

另外,既然字符串和字典都可以做鍵,那么列表行不行呢?答案是不行,列表里的元素,(如 '$userid') 并不會(huì)被自動(dòng)識(shí)別為字段,而是僅作一般字符串處理。

最后關(guān)于 aggregate 中可用的運(yùn)算操作符,可參見:

https://docs.mongodb.com/manual/reference/operator/aggregation/#accumulators

如其中的 $addToSet 也是頗有用處,可以用來實(shí)現(xiàn) “統(tǒng)計(jì)每個(gè)人都買過哪些 itemid” 這樣的功能:

group = {
 '_id': {'userid': '$userid'},
 'dist_itemids': {'$addToSet': '$itemid'},
}

group

相較于 aggregate 的全能,group 是專門處理分組操作的一個(gè)命令,因此這個(gè)方法的參數(shù)也更明確,主要參數(shù)為:

  • key list, 分組的鍵
  • condition dict,過濾條件
  • initial dict,初始值
  • reduce string/bson.Code, js 的 reduce 函數(shù)

例:

key = ['userid', 'itemid']
condition = {
 'time': {
 '$gte': start_time,
 '$lte': end_time,
 }
}
initial = {'count': 0}
reducer = Code("""
 function(obj, prev) {
 prev.count = prev.count + obj.amount
 }
""")

ret = collection.group(key, condition, initial, reducer)

>>> ret
[{'userid': 110, 'itemid': 123, 'count': 500.0}, ...]

這里的分組數(shù)據(jù)聚合,是通過 reduce 函數(shù)實(shí)現(xiàn)的,這個(gè)函數(shù)與 python 的 reduce 不同,它不需要返回值,而是直接修改 prev 參數(shù)即可,這個(gè)參數(shù)會(huì)自動(dòng)代入下一次調(diào)用。這可能是 js 的實(shí)現(xiàn)。

須注意的是 js 默認(rèn)返回浮點(diǎn)數(shù)。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • 手把手教你安裝Windows版本的Tensorflow

    手把手教你安裝Windows版本的Tensorflow

    這篇文章主要介紹了手把手教你安裝Windows版本的Tensorflow,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Python局部變量與全局變量區(qū)別原理解析

    Python局部變量與全局變量區(qū)別原理解析

    這篇文章主要介紹了Python局部變量與全局變量區(qū)別原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • python執(zhí)行l(wèi)inux系統(tǒng)命令的三種方式小結(jié)

    python執(zhí)行l(wèi)inux系統(tǒng)命令的三種方式小結(jié)

    本文介紹三種在python執(zhí)行l(wèi)inux命令的方式,三種方式都是基于python的標(biāo)準(zhǔn)庫實(shí)現(xiàn),因此不需要額外安裝第三方庫,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • Python中讀取文件名中的數(shù)字的實(shí)例詳解

    Python中讀取文件名中的數(shù)字的實(shí)例詳解

    在本篇文章里小編給大家整理了一篇關(guān)于Python中讀取文件名中的數(shù)字的實(shí)例詳解內(nèi)容,有興趣的朋友們可以參考下。
    2020-12-12
  • 15行Python代碼實(shí)現(xiàn)網(wǎng)易云熱門歌單實(shí)例教程

    15行Python代碼實(shí)現(xiàn)網(wǎng)易云熱門歌單實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于利用15行Python代碼實(shí)現(xiàn)網(wǎng)易云熱門歌單的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Python+Matplotlib繪制雙y軸圖像的示例代碼

    Python+Matplotlib繪制雙y軸圖像的示例代碼

    這篇文章主要介紹了如何利用python的matplotlib繪制雙Y軸圖像,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有很好地幫助,需要的朋友可以參考下
    2022-04-04
  • Python 統(tǒng)計(jì)列表中重復(fù)元素的個(gè)數(shù)并返回其索引值的實(shí)現(xiàn)方法

    Python 統(tǒng)計(jì)列表中重復(fù)元素的個(gè)數(shù)并返回其索引值的實(shí)現(xiàn)方法

    這篇文章主要介紹了Python 統(tǒng)計(jì)列表中重復(fù)元素的個(gè)數(shù)并返回其索引值,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • jupyter中torch庫的安裝與虛擬環(huán)境的搭建方式

    jupyter中torch庫的安裝與虛擬環(huán)境的搭建方式

    本文詳細(xì)介紹了如何在Windows系統(tǒng)上創(chuàng)建和配置PyTorch環(huán)境,包括安裝Anaconda、創(chuàng)建虛擬環(huán)境、配置鏡像源、安裝CUDA、查找和安裝PyTorch版本、安裝ipykernel以及在Jupyter Notebook中切換環(huán)境
    2025-02-02
  • Python垃圾回收及Linux?Fork

    Python垃圾回收及Linux?Fork

    這篇文章主要介紹了Python垃圾回收及Linux?Forkm,Python垃圾回收主要以引用計(jì)數(shù)為主,分代回收為輔,而一個(gè)進(jìn)程調(diào)用fork()函數(shù)后,系統(tǒng)先給新的進(jìn)程分配資源,例如存儲(chǔ)數(shù)據(jù)和代碼的空間,下面來看文章具體介紹吧
    2022-01-01
  • Python結(jié)合Selenium簡單實(shí)現(xiàn)Web自動(dòng)化測試

    Python結(jié)合Selenium簡單實(shí)現(xiàn)Web自動(dòng)化測試

    這篇文章是入門級(jí)別的應(yīng)用Python + Selenium進(jìn)行自動(dòng)化測試,包括環(huán)境搭建及簡單的實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09

最新評論

龙南县| 浮梁县| 夏邑县| 雅江县| 淮南市| 呈贡县| 平原县| 高要市| 房产| 应城市| 长岛县| 昭苏县| 邹平县| 娄底市| 越西县| 白水县| 定西市| 乌拉特前旗| 饶河县| 龙江县| 手游| 林甸县| 沙田区| 北京市| 石门县| 丰城市| 海淀区| 聂荣县| 长垣县| 桦川县| 乌苏市| 开封县| 克东县| 楚雄市| 新邵县| 邵武市| 商洛市| 辽中县| 革吉县| 治县。| 平昌县|