summaryrefslogtreecommitdiff
path: root/jstests/core/group5.js
blob: 2f57e110d50ac278696d81c903fbbb2f06dc248e (plain)
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");