欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mongodb中按天進(jìn)行聚合查詢的實(shí)例教程

 更新時間:2019年07月10日 10:58:08   作者:楊彥星  
這篇文章主要給大家介紹了關(guān)于mongodb中按天進(jìn)行聚合查詢的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mongodb具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

最近在寫項(xiàng)目的時候遇到一個問題,使用mongodb記錄了用例的執(zhí)行結(jié)果,但是在時間的記錄上使用的是date格式,現(xiàn)在有一個需求,以天為單位,統(tǒng)計一下每天成功的用例和失敗的用例,說到統(tǒng)計,肯定是要用到聚合查詢,但是如果以date格式的時間為group依據(jù),那么等同于沒有分組,因?yàn)樵谟涗浻美臅r間幾乎不可能同時,今天查閱了一下相關(guān)文檔,可以使用mongodb的$dateToString命令來完成這個需求

問題來源

假如我們以如下的數(shù)據(jù)

/* 1 */
{
 "_id" : ObjectId("5d24c09651a456efbc231669"),
 "time" : ISODate("2019-07-08T10:12:35.125Z"),
 "result" : "Pass"
}

/* 2 */
{
 "_id" : ObjectId("5d24c09e51a456efbc23166a"),
 "time" : ISODate("2019-07-08T10:12:36.125Z"),
 "result" : "Pass"
}

...
...

/* 10 */
{
 "_id" : ObjectId("5d24c0d851a456efbc231672"),
 "time" : ISODate("2019-07-06T10:10:52.125Z"),
 "result" : "Pass"
}

/* 11 */
{
 "_id" : ObjectId("5d24c0e751a456efbc231673"),
 "time" : ISODate("2019-07-06T10:10:52.125Z"),
 "result" : "Fail"
}

我的預(yù)期結(jié)果是

{'_id': '2019-07-06', 'Pass': 1}
{'_id': '2019-07-06', 'Fail': 2}
{'_id': '2019-07-07', 'Pass': 2}
{'_id': '2019-07-07', 'Fail': 1}
{'_id': '2019-07-08', 'Pass': 2}
{'_id': '2019-07-08', 'Fail': 3}

如果按照以前的聚合方式,通過$time來分組,由于每個時間都不相同,所以這樣的聚合就相當(dāng)于沒有聚合

#coding:utf-8

from pymongo import MongoClient

client = MongoClient(host=['%s:%s'%("127.0.0.1",27017)])
G_mongo = client['test']

pipeline = [
  {'$group': {'_id': '$time', 'count': {'$sum': 1}}},
 ]
for i in G_mongo['test'].aggregate(pipeline):
 print(i)

得到的結(jié)果

{'_id': datetime.datetime(2019, 7, 6, 10, 10, 32, 125000), 'count': 1}
{'_id': datetime.datetime(2019, 7, 7, 10, 10, 32, 125000), 'count': 1}
{'_id': datetime.datetime(2019, 7, 8, 10, 11, 22, 125000), 'count': 1}
{'_id': datetime.datetime(2019, 7, 6, 10, 10, 52, 125000), 'count': 1}
{'_id': datetime.datetime(2019, 7, 8, 10, 11, 32, 125000), 'count': 1}
{'_id': datetime.datetime(2019, 7, 8, 10, 12, 32, 125000), 'count': 1}
{'_id': datetime.datetime(2019, 7, 7, 10, 11, 22, 125000), 'count': 1}
{'_id': datetime.datetime(2019, 7, 8, 10, 12, 36, 125000), 'count': 1}
{'_id': datetime.datetime(2019, 7, 8, 10, 12, 35, 125000), 'count': 1}
{'_id': datetime.datetime(2019, 7, 7, 10, 10, 22, 125000), 'count': 1}

可以看到,由于$time上的時間,誰和誰都不一樣,所以如果以$time為分組對象的話每個統(tǒng)計都是1。

問題的解決

在分組的時候有一個$dateToString指令,可以將日期格式的值轉(zhuǎn)化為字符串,比如這里因?yàn)樾枨笫且蕴鞛閱挝唬晕覍⑵滢D(zhuǎn)為
%Y-%m-%d的字符串格式,具體的$grouop如下

{'$group': {'_id': {"$dateToString":{'format':'%Y-%m-%d','date':'$time'}}, 'count': {'$sum': 1}}}

$dateToString的說明文檔可以訪問https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString/ 查看,簡單介紹一個

{ $dateToString: {
  date: <dateExpression>,
  format: <formatString>,
  timezone: <tzExpression>,
  onNull: <expression>
} }

它需要四個參數(shù),只有date參數(shù)是必須的,指定數(shù)據(jù)來源,format是轉(zhuǎn)化的格式,timezone為時區(qū),onNull是如果日期值不存在時返回的值。

#coding:utf-8

from pymongo import MongoClient

client = MongoClient(host=['%s:%s'%("127.0.0.1",27017)])
G_mongo = client['test']


pipeline = [
    # {'$group': {'_id': '$time', 'count': {'$sum': 1}}},
    {'$group': {'_id': {"$dateToString":{'format':'%Y-%m-%d','date':'$time'}}, 'count': {'$sum': 1}}}
  ]
for i in G_mongo['test'].aggregate(pipeline):
  print(i)

上面代碼執(zhí)行的結(jié)果如下

{'_id': '2019-07-06', 'count': 2}
{'_id': '2019-07-07', 'count': 3}
{'_id': '2019-07-08', 'count': 5}

這個看起來還不錯,但是離我的目標(biāo)還差一點(diǎn),因?yàn)樗€沒有按照用例執(zhí)行結(jié)果進(jìn)行分組,再以天進(jìn)行倒序排列

#coding:utf-8

from pymongo import MongoClient

client = MongoClient(host=['%s:%s'%("127.0.0.1",27017)])
G_mongo = client['test']


pipeline = [
    # {'$group': {'_id': '$time', 'count': {'$sum': 1}}},
    {'$group': {'_id': {'date':{"$dateToString":{'format':'%Y-%m-%d','date':'$time'}},'result':'$result'}, 'count': {'$sum': 1}}},
    {'$sort':{"_id.date":-1}}
  ]
for i in G_mongo['test'].aggregate(pipeline):
  print(i)

得到的結(jié)果如下

{'_id': {'date': '2019-07-08', 'result': 'Fail'}, 'count': 3}
{'_id': {'date': '2019-07-08', 'result': 'Pass'}, 'count': 2}
{'_id': {'date': '2019-07-07', 'result': 'Pass'}, 'count': 2}
{'_id': {'date': '2019-07-07', 'result': 'Fail'}, 'count': 1}
{'_id': {'date': '2019-07-06', 'result': 'Fail'}, 'count': 1}
{'_id': {'date': '2019-07-06', 'result': 'Pass'}, 'count': 2}

查看文檔,除了使用$dateToString指令還可以使用$dayOfMonth指令

pipeline = [
    {'$group': {'_id': {'date':{"$dayOfMonth":{'date':'$time'}},'result':'$result'}, 'count': {'$sum': 1}}},
    {'$sort':{"_id.date":-1}},
  ]

但是這個指令只能適用于單一月份,如果兩個月就會有交集,如7月6號和6月6號的會聚合到一起
上面得到的結(jié)果是

{'_id': {'date': 8, 'result': 'Fail'}, 'count': 3}
{'_id': {'date': 8, 'result': 'Pass'}, 'count': 2}
{'_id': {'date': 7, 'result': 'Pass'}, 'count': 2}
{'_id': {'date': 7, 'result': 'Fail'}, 'count': 1}
{'_id': {'date': 6, 'result': 'Pass'}, 'count': 2}
{'_id': {'date': 6, 'result': 'Fail'}, 'count': 1}

所以需要根據(jù)需求靈活的使用各種指令。

總結(jié)

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

您可能感興趣的文章:

相關(guān)文章

  • MongoDB 3.6版本中bind_ip設(shè)置詳解

    MongoDB 3.6版本中bind_ip設(shè)置詳解

    這篇文章主要給大家介紹了關(guān)于MongoDB 3.6版本中bind_ip設(shè)置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • MongoDB運(yùn)行日志實(shí)現(xiàn)自動分割的方法實(shí)例

    MongoDB運(yùn)行日志實(shí)現(xiàn)自動分割的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于MongoDB運(yùn)行日志實(shí)現(xiàn)自動分割的方法,文中以一個MongoDB實(shí)例為例,寫了一個腳本來實(shí)現(xiàn)自動分割MongoDB日志,有需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • MongoDB數(shù)據(jù)庫授權(quán)認(rèn)證的實(shí)現(xiàn)

    MongoDB數(shù)據(jù)庫授權(quán)認(rèn)證的實(shí)現(xiàn)

    本文主要介紹了MongoDB數(shù)據(jù)庫授權(quán)認(rèn)證的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 為MongoDB數(shù)據(jù)庫注冊windows服務(wù)

    為MongoDB數(shù)據(jù)庫注冊windows服務(wù)

    這篇文章介紹了為MongoDB數(shù)據(jù)庫注冊windows服務(wù)的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • MongoDB索引類型匯總分享

    MongoDB索引類型匯總分享

    這篇文章主要介紹了MongoDB索引類型匯總,單字段索引、復(fù)合索引、多鍵索引、文本索引、2dsphere索引等多種索引類型,需要的朋友可以參考一下
    2022-04-04
  • MongoDB數(shù)據(jù)庫基本概念解析

    MongoDB數(shù)據(jù)庫基本概念解析

    這篇文章介紹了MongoDB數(shù)據(jù)庫的一些基本概念,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • MongoDB加入到Windows服務(wù)的方法

    MongoDB加入到Windows服務(wù)的方法

    這篇文章主要介紹了Windows中把MongoDB加入到本地服務(wù)的方法,即把MongoDB加入到Windows服務(wù)中隨機(jī)啟動,需要的朋友可以參考下
    2014-10-10
  • MongoDB開源數(shù)據(jù)庫開發(fā)工具dbKoda

    MongoDB開源數(shù)據(jù)庫開發(fā)工具dbKoda

    這篇文章主要介紹了MongoDB開源數(shù)據(jù)庫開發(fā)工具dbKoda的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • mac下使用brew 安裝mongodb的方法教程

    mac下使用brew 安裝mongodb的方法教程

    mac 系統(tǒng)常用的軟件安裝工具就是 homebrew.那么通過brew怎么安裝mongodb呢?下面小編給大家分享mac下使用brew 安裝mongodb的方法教程,一起看看吧
    2016-10-10
  • MongoDB設(shè)計方法以及技巧示例詳解

    MongoDB設(shè)計方法以及技巧示例詳解

    這篇文章主要給大家介紹了關(guān)于MongoDB設(shè)計方法以及技巧的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MongoDB具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評論