首頁 資料庫 mysql教程 mongodb聚合函数

mongodb聚合函数

Jun 07, 2016 pm 02:58 PM
mongodb 函數 聚合

mongodb聚合函数 1.count 这个函数很好理解,和其他数据库一样,就是做一个count操作 select count(*) from tab1 =db.tab1.count() 以上例子很好理解,但是如果在操作中有skip,limit这种操作的话,那么count会忽略掉这些操作,必须加入一个true参数 比如:d

mongodb聚合函数

 

1.count

这个函数很好理解,和其他数据库一样,就是做一个count操作

select count(*) from tab1 =db.tab1.count() 

以上例子很好理解,但是如果在操作中有skip,limit这种操作的话,那么count会忽略掉这些操作,必须加入一个true参数

比如:db.tab1.find().skip(1),limit(2).count()和db.tab1.find().count()得出的结果是一样的

必须修改为db.tab1.find().skip(1).limit(2).count(true)

2.distinct

去重函数,这个也应该很熟悉,各种关系数据库都有

具体操作:db.runCommand({"distinct":"collection","key":"xxxx"})=db.collections.distinct("xxxx");

3.group

select a,b,sum(c) csum from coll where active=1 group by a,b

 db.coll.group( {key: { a:true, b:true },

                               cond: { active:1 },

                               reduce:function(obj,prev){ prev.csum += obj.c; },

                               initial: { csum: 0 }

                               });

参数解释:

Key:group字段

Reduce:聚合函数,典型的有sum和count操作,包含两个参数,当前遍历对象以及聚合计数器

Initial:初始化计数器值

Cond:查询条件筛选选项,如果是空,那么默认对当前collection的所有行操作

Group不能在sharding中使用,结果输出不能多于10000个keys

举例:

> db.mtb1.find()

{ "_id" : ObjectId("4fb4be52aa814943b788095c"), "name" : "aaa", "score" : 77 }

{ "_id" : ObjectId("4fb4be5caa814943b788095d"), "name" : "bbb", "score" : 79 }

{ "_id" : ObjectId("4fb4be61aa814943b788095e"), "name" : "ccc", "score" : 79 }

{ "_id" : ObjectId("4fb4be69aa814943b788095f"), "name" : "ddd", "score" : 79 }

{ "_id" : ObjectId("4fb4be74aa814943b7880960"), "name" : "eee", "score" : 100 }

{ "_id" : ObjectId("4fb4be7aaa814943b7880961"), "name" : "fff", "score" : 100 }

{ "_id" : ObjectId("4fb4be82aa814943b7880962"), "name" : "ggg", "score" : 100 }

{ "_id" : ObjectId("4fb4be9eaa814943b7880963"), "name" : "hhh", "score" : 200}

 

> db.mtb1.group(

... {key:{score:true},

... reduce:function(obj,prev){prev.count++;},

... initial:{count:0}

... });

[

        {

                "score" : 77,

                "count" : 1

        },

        {

                "score" : 79,

                "count" : 3

        },

        {

                "score" : 100,

                "count" : 3

        },

        {

                "score" : 200,

                "count" : 1

        }

]

一个简单的例子,应该很明白了。其实这里group还是建立在reduce上面

4.map/reduce

          这个工具的功能可以实现以上三种任何一种,它是分两步完成,先做map,再reduce,map首先对数据进行分解映射,map执行完,紧接着会进行reduce,map后会的到key-values,像{key:[value1,value2,value3...]},然后通过reduce处理后得到key-value,也就是单一的值。

语法:

db.runCommand(

 { mapreduce : ,

   map : ,

   reduce :

   [, query : ]

   [, sort : ]

   [, limit : ]

   [, out : ]

   [, keeptemp: ]

   [, finalize : ]

   [, scope : ]

   [, verbose : true]

 }

);

query是很常用的,它用来在map阶段过滤查询条件的以限定MapReduce操作的记录范围,sort和limit集合query使用。

out指定输出结果的collections名称

Keeptemp 布尔型,默认是false,如果是true那么生成的collection是永久存在的,如果是false,那么在客户端连接关闭后,会自动删除生成的collection

Finalize一般用来计算平均数,裁剪数组,清除多余信息

query是很常用的,它用来在map阶段过滤查询条件的以限定MapReduce操作的记录范围,sort和limit集合query使用。

out指定输出结果的collections名称

Keeptemp 布尔型,默认是false,如果是true那么生成的collection是永久存在的,如果是false,那么在客户端连接关闭后,会自动删除生成的collection

Finalize一般用来计算平均数,裁剪数组,清除多余信息

{ result : ,

  counts : {

       input :  ,

       emit  : ,

       output :

  } ,

  timeMillis : ,

  ok : ,

  [, err : ]

}

result:储存结果的collection的名字

input:满足条件的数据行数

emit:emit调用次数,也就是所有集合中的数据总量

ouput:返回结果条数

timeMillis:执行时间,毫秒为单位

ok:是否成功,成功为1

err:如果失败,这里可以有失败原因

 

给出官方文档的一个例子:

$ ./mongo

> db.things.insert( { _id : 1, tags : ['dog', 'cat'] } );

> db.things.insert( { _id : 2, tags : ['cat'] } );

> db.things.insert( { _id : 3, tags : ['mouse', 'cat', 'dog'] } );

> db.things.insert( { _id : 4, tags : []  } );

 

> // map function

> m = function(){

...    this.tags.forEach(

...        function(z){

...            emit( z , { count : 1 } );

...        }

...    );

...};

 

> // reduce function

> r = function( key , values ){

...    var total = 0;

...    for ( var i=0; i

...        total += values[i].count;

...    return { count : total };

...};

 

> res = db.things.mapReduce(m,r);

> res

{"timeMillis.emit" : 9 , "result" : "mr.things.1254430454.3" ,

 "numObjects" : 4 , "timeMillis" : 9 , "errmsg" : "" , "ok" : 0}

 

> db[res.result].find()

{"_id" : "cat" , "value" : {"count" : 3}}

{"_id" : "dog" , "value" : {"count" : 2}}

{"_id" : "mouse" , "value" : {"count" : 1}}

 

> db[res.result].drop()

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

excel函數公式大全 excel函數公式大全 May 07, 2024 pm 12:04 PM

1. SUM函數,用於對一列或一組單元格中的數字進行求和,例如:=SUM(A1:J10)。 2、AVERAGE函數,用於計算一列或一組儲存格中的數字的平均值,例如:=AVERAGE(A1:A10)。 3.COUNT函數,用於計算一列或一組單元格中的數字或文字的數量,例如:=COUNT(A1:A10)4、IF函數,用於根據指定的條件進行邏輯判斷,並返回相應的結果。

Golang 函數接收 map 參數時的注意事項 Golang 函數接收 map 參數時的注意事項 Jun 04, 2024 am 10:31 AM

在Go中傳遞map給函數時,預設會建立副本,對副本的修改不影響原map。如果需要修改原始map,可透過指標傳遞。空map需小心處理,因為技術上是nil指針,傳遞空map給期望非空map的函數會發生錯誤。

net4.0有什麼用 net4.0有什麼用 May 10, 2024 am 01:09 AM

.NET 4.0 用於創建各種應用程序,它為應用程式開發人員提供了豐富的功能,包括:物件導向程式設計、靈活性、強大的架構、雲端運算整合、效能最佳化、廣泛的程式庫、安全性、可擴展性、資料存取和行動開發支援。

如何在Debian上配置MongoDB自動擴容 如何在Debian上配置MongoDB自動擴容 Apr 02, 2025 am 07:36 AM

本文介紹如何在Debian系統上配置MongoDB實現自動擴容,主要步驟包括MongoDB副本集的設置和磁盤空間監控。一、MongoDB安裝首先,確保已在Debian系統上安裝MongoDB。使用以下命令安裝:sudoaptupdatesudoaptinstall-ymongodb-org二、配置MongoDB副本集MongoDB副本集確保高可用性和數據冗餘,是實現自動擴容的基礎。啟動MongoDB服務:sudosystemctlstartmongodsudosys

利用工具探究 golang 函數的內在世界 利用工具探究 golang 函數的內在世界 May 06, 2024 pm 01:51 PM

pprof工具可以幫助我們分析Go函數的內部工作原理,我們可以利用它:取得函數呼叫圖,了解呼叫關係。分析函數效能,找出瓶頸。優化函數記憶體分配,減少記憶體使用。

MongoDB在Debian上的高可用性如何保障 MongoDB在Debian上的高可用性如何保障 Apr 02, 2025 am 07:21 AM

本文介紹如何在Debian系統上構建高可用性的MongoDB數據庫。我們將探討多種方法,確保數據安全和服務持續運行。關鍵策略:副本集(ReplicaSet):利用副本集實現數據冗餘和自動故障轉移。當主節點出現故障時,副本集會自動選舉新的主節點,保證服務的持續可用性。數據備份與恢復:定期使用mongodump命令進行數據庫備份,並製定有效的恢復策略,以應對數據丟失風險。監控與報警:部署監控工具(如Prometheus、Grafana)實時監控MongoDB的運行狀態,並

Golang 函數中 goroutine 的建立與管理 Golang 函數中 goroutine 的建立與管理 Jun 05, 2024 pm 07:06 PM

Go語言中,建立goroutine使用go關鍵字加函數呼叫。管理goroutine時,使用sync.WaitGroup進行同步;使用context套件可取消goroutine。實戰中可用於並行處理網路請求、圖片處理等任務。

揭秘 golang 函數調試與分析的秘密 揭秘 golang 函數調試與分析的秘密 May 06, 2024 pm 06:21 PM

Go函數調試與分析的秘密:可以使用Delve進行調試,調試常用命令包括next、step、continue、print;Go標準庫提供堆疊分析和內存分析工具,透過pprof套件生成分析文件並使用gotoolpprof命令查看分析結果;調試故障函數需要單步執行並檢查變數值;分析效能瓶頸需要產生堆疊分析檔案並優化高耗時函數;分析記憶體洩漏需要產生記憶體分析檔案並查找循環引用或未釋放指標。

See all articles