Fix config formatting
[gitter.git] / scripts / useful-queries / distinct-chatters-across-community.js
blobd89b2dc46a5a691b28b78eb4e4cdf418c456c884
1 rs.slaveOk();
3 var DAYS = 90;
5 var horizon = new Date(Date.now() - 86400000 * DAYS);
7 function objectIdFromDate(date) {
8   return Math.floor(date.getTime() / 1000).toString(16) + '0000000000000000';
11 var firstId = ObjectId(objectIdFromDate(horizon));
13 var result = db.chatmessages.aggregate([
14   {
15     $match: {
16       _id: { $gt: firstId }
17     }
18   },
19   {
20     $group: {
21       _id: '$toTroupeId',
22       chatUsers: { $addToSet: '$fromUserId' }
23     }
24   },
25   {
26     $lookup: {
27       from: 'troupes',
28       localField: '_id',
29       foreignField: '_id',
30       as: 'troupe'
31     }
32   },
33   {
34     $unwind: '$troupe'
35   },
36   {
37     $project: {
38       _id: {
39         $cond: {
40           if: { $eq: ['$troupe.githubType', 'ORG'] },
41           then: '$troupe.lcUri',
42           else: '$troupe.lcOwner'
43         }
44       },
45       chatUsers: 1
46     }
47   },
48   {
49     $match: { _id: { $ne: null } }
50   },
51   {
52     $unwind: '$chatUsers'
53   },
54   {
55     $group: {
56       _id: '$_id',
57       chatUsers: { $addToSet: '$chatUsers' }
58     }
59   },
60   {
61     $project: {
62       _id: 1,
63       chatUserCount: { $size: '$chatUsers' }
64     }
65   },
66   {
67     $sort: {
68       chatUserCount: -1
69     }
70   },
71   {
72     $limit: 200
73   }
74 ]);
76 print('Group\tCount');
77 result.forEach(function(x) {
78   print(x._id + '\t' + x.chatUserCount);
79 });