天天看點

mongodb 分組聚合_mongodb 聚合指令

MongoDB中聚合主要用于處理資料,如統計平均值,求和等等,并傳回計算後的資料結果。

1. count

count函數傳回指定集合中的數量。

> db. mediaCollection.count()

4

> db. mediaCollection.find( { Publisher : "Apress", Type: "Book" } ).count()

1

1

2

3

4

>db.mediaCollection.count()

4

>db.mediaCollection.find({Publisher:"Apress",Type:"Book"}).count()

1

2. distinct

distinct函數用來除重,找出所有不同的值。

> db. mediaCollection.distinct( "Title")

[ "Definitive Guide to MongoDB, the", "Nevermind" ]

> db. mediaCollection.distinct ("Tracklist.Title")

[ "In Bloom", "Smells like teen spirit" ]

1

2

3

4

>db.mediaCollection.distinct("Title")

["Definitive Guide to MongoDB, the","Nevermind"]

>db.mediaCollection.distinct("Tracklist.Title")

["In Bloom","Smells like teen spirit"]

3. group

group函數是類似于SQL的GROUP BY功能,雖然文法稍有不同。該指令的目的是傳回分組的項目的數組。該函數有三個參數: key, initial,  reduce。

key參數指定要以什麼來分組,如以标題進行分組。

initial參數每個分組reduce調用的初始值。

reduce參數同類元素放在一起,需要兩個參數:目前被周遊的文檔和聚集計數器對象。

> db. mediaCollection.group (

... {

... key: {Title : true},

... initial: {Total : 0},

... reduce : function (items,prev)

... {

... prev.Total += 1

... }

... }

... )

[

{

"Title" : "Definitive Guide to MongoDB, the",

"Total" : 1

},

{

"Title" : "Nevermind",

"Total" : 2

},

{

"Title" : null,

"Total" : 1

}

]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

>db.mediaCollection.group(

...{

...key:{Title:true},

...initial:{Total:0},

...reduce:function(items,prev)

...{

...prev.Total+=1

...}

...}

...)

[

{

"Title":"Definitive Guide to MongoDB, the",

"Total":1

},

{

"Title":"Nevermind",

"Total":2

},

{

"Title":null,

"Total":1

}

]

除了key, initial,  reduce參數,還可以指定三個可選參數:keyf,cond,finalize。

group函數目前不能在分片環境下使用,可以使用MapReduce函數來代替。