1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
// Cannot implicitly shard accessed collections because of unsupported group operator on sharded
// collection.
// @tags: [assumes_unsharded_collection]
t = db.group5;
t.drop();
// each group has groupnum+1 5 users
for (var group = 0; group < 10; group++) {
for (var i = 0; i < 5 + group; i++) {
t.save({group: "group" + group, user: i});
}
}
function c(group) {
return t.group({
key: {group: 1},
q: {group: "group" + group},
initial: {users: {}},
reduce: function(obj, prev) {
prev.users[obj.user] = true; // add this user to the hash
},
finalize: function(x) {
var count = 0;
for (var key in x.users) {
count++;
}
// replace user obj with count
// count add new field and keep users
x.users = count;
return x;
}
})[0]; // returns array
}
assert.eq("group0", c(0).group, "g0");
assert.eq(5, c(0).users, "g0 a");
assert.eq("group5", c(5).group, "g5");
assert.eq(10, c(5).users, "g5 a");
|