mongo 中级 聚合

聚合的四个关键字 count,distinct,group,mapReduce

1
2
3
4
5
6
7
8
9
db.user.find();

{_id: ObjectId(0000000000000000001)', name: 'alan', age: 20}
{_id: ObjectId(0000000000000000002)', name: 'wei', age: 21}
{_id: ObjectId(0000000000000000003)', name: 'Lee', age: 23}

{_id: ObjectId(0000000000000000004)', name: 'Fee', age: 20}
{_id: ObjectId(0000000000000000005)', name: 'D.D.', age: 23}
{_id: ObjectId(0000000000000000006)', name: 'Cd', age: 20}

count

1
2
db.user.count()
// 6

distinct

1
2
db.user.distinct('age')
// [20, 21, 23]

group

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
db.user.group({
key: {age: true},
initial: {users: []},
$reduce: function(cur, prev) {
prev.users.push(cur.name)
}
})

/*
[{
age: 20,
users: ['alan', 'Fee', 'Cd']
},{
age: 21,
users:['wei']
},{
age: 23,
users: ['Lee','D.D.']
}]

*/
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.user.group({
key: {age: true},
initial: {users: []},
finalize:function(out) {
out.count = out.users.lenght
},
condition: {age: {$lt: 22}},
$reduce: function(cur, prev) {
prev.users.push(cur.name)
}
})

/*
[{
age: 20,
users: ['alan', 'Fee', 'Cd'],
count: 3
},{
age: 21,
users:['wei'],
count: 1
}]

*/

mapReduce

the process:

dd

refs:
cnblogs
1
cnblogs