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" );