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函數來代替。