| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427 |
- /*
- * PROPRIETARY AND CONFIDENTIAL
- *
- * The contents of this example are proprietary and confidential, and may not be used or distributed without express
- * written permission from MongoLab.
- *
- */
- var mongodb = require("mongodb");
- var async = require("async");
- var ObjectId = mongodb.ObjectID;
- //mongodb.Logger.setLevel("debug");
- var uri = process.env.MONGODB_URI;
- function log(s) {
- console.log(new Date().toISOString() + " " + s);
- }
- log("Connecting...");
- mongodb.MongoClient.connect(
- uri,
- {
- replSet: {
- //poolSize: 10
- socketOptions: {
- connectTimeoutMS: 60 * 1000
- }
- }
- },
- function (err, db) {
- if (err) {
- log("Error trying to connect.");
- log(err.stack);
- } else {
- log("Connected.");
- db.serverConfig.on('joined', function(t, s) {
- log("joined :: " + t + " :: " + s.name);
- });
- db.serverConfig.on('left', function(t, s) {
- log("joined :: " + t + " :: " + s.name);
- });
- db.serverConfig.on('timeout', function(err) {
- log("timeout :: ");
- log(err.stack);
- });
- log("Running aggregations...");
- async.forEachOf(
- aggregations,
- function (item, i, cb) {
- log("Running aggregation " + i + "...");
- db.collection(item.collection).aggregate(item.pipeline, function (err, result) {
- if (err) {
- log("Error running aggregation " + i + ".");
- log(err.stack)
- } else {
- log("Done running aggregation " + i + ".");
- }
- cb();
- });
- },
- function (err) {
- if (err) {
- log("Untrapped error.");
- log(err.stack);
- } else {
- log("Finished running all aggregations.")
- }
- log("Closing database...");
- db.close();
- }
- )
- }
- }
- );
- var aggregations = [
- // ========== 1 ==========
- {
- collection: "tlogs",
- pipeline: [
- {
- "$match": {
- "_type": "tlog",
- "organization": ObjectId("53eb1ee2e6c77111203d8503"),
- "businessDate": {
- "$gte": ISODate("2015-11-01T00:00:00.000+0000"),
- "$lt": ISODate("2015-11-28T23:59:59.999+0000")
- }
- }
- },
- {
- "$unwind": "$order"
- },
- {
- "$unwind": "$order.orderedOffers"
- },
- {
- "$redact": {
- "$cond": {
- "if": {
- "$not": "$order.orderedOffers.onTheHouse"
- },
- "then": "$$KEEP",
- "else": "$$PRUNE"
- }
- }
- },
- {
- "$redact": {
- "$cond": {
- "if": {
- "$not": "$order.orderedOffers.cancellation"
- },
- "then": "$$KEEP",
- "else": "$$PRUNE"
- }
- }
- },
- {
- "$group": {
- "_id": "$order.orderedOffers.offer",
- "offer": {
- "$first": "$order.orderedOffers.offer"
- },
- "menu": {
- "$first": "$order.orderedOffers.menu"
- },
- "totalAmount": {
- "$sum": "$order.orderedOffers.amount"
- },
- "totalCount": {
- "$sum": NumberInt(1)
- },
- "totalDiners": {
- "$sum": "$diners"
- }
- }
- }
- ]
- },
- // ========== 2 ==========
- {
- collection: "tlogs",
- pipeline: [
- {
- "$match": {
- "_type": "tlog",
- "organization": ObjectId("53eb1ee2e6c77111203d8503"),
- "businessDate": {
- "$gte": ISODate("2015-11-01T00:00:00.000+0000"),
- "$lt": ISODate("2015-11-28T23:59:59.999+0000")
- }
- }
- },
- {
- "$unwind": "$order"
- },
- {
- "$unwind": "$order.orderedItems"
- },
- {
- "$redact": {
- "$cond": {
- "if": {
- "$not": "$order.orderedItems.onTheHouse"
- },
- "then": "$$PRUNE",
- "else": "$$KEEP"
- }
- }
- },
- {
- "$group": {
- "_id": {
- "category": "$order.orderedItems.category"
- },
- "totalItems": {
- "$sum": NumberInt(1)
- },
- "totalAmount": {
- "$sum": "$order.orderedItems.price"
- }
- }
- }
- ]
- },
- // ========== 3 ==========
- {
- collection: "tlogs",
- pipeline: [
- {
- "$match": {
- "_type": "tlog",
- "organization": ObjectId("53eb1ee2e6c77111203d8503"),
- "businessDate": {
- "$gte": ISODate("2015-11-01T00:00:00.000+0000"),
- "$lt": ISODate("2015-11-28T23:59:59.999+0000")
- },
- "order": {
- "$elemMatch": {
- "onTheHouse": null
- }
- }
- }
- },
- {
- "$unwind": "$order"
- },
- {
- "$unwind": "$order.tips"
- },
- {
- "$project": {
- "_id": "$order.tips._id",
- "tableTip": {
- "$cond": [
- {
- "$eq": [
- {
- "$size": {
- "$setIntersection": [
- "$order.tableIds",
- [
- ObjectId("53eb1ee4e6c77111203d852e"),
- ObjectId("53eb1ee4e6c77111203d852f"),
- ObjectId("53eb1ee4e6c77111203d8530"),
- ObjectId("53eb1ee4e6c77111203d8531"),
- ObjectId("53eb1ee4e6c77111203d8532"),
- ObjectId("53eb1ee4e6c77111203d8533"),
- ObjectId("53eb1ee4e6c77111203d8534"),
- ObjectId("53eb1ee4e6c77111203d8535"),
- ObjectId("53eb1ee4e6c77111203d8536"),
- ObjectId("53eb1ee4e6c77111203d8537"),
- ObjectId("53eb1ee4e6c77111203d8538"),
- ObjectId("53eb1ee4e6c77111203d8539"),
- ObjectId("53eb1ee4e6c77111203d853a"),
- ObjectId("53eb1ee4e6c77111203d853b"),
- ObjectId("53eb1ee4e6c77111203d853c"),
- ObjectId("53eb1ee4e6c77111203d853d"),
- ObjectId("53eb1ee4e6c77111203d853e"),
- ObjectId("53eb1ee4e6c77111203d853f"),
- ObjectId("53eb1ee4e6c77111203d8540"),
- ObjectId("53eb1ee4e6c77111203d8541"),
- ObjectId("53eb1ee4e6c77111203d8542"),
- ObjectId("53eb1ee4e6c77111203d8543"),
- ObjectId("53eb1ee4e6c77111203d8544"),
- ObjectId("53eb1ee4e6c77111203d8545"),
- ObjectId("53eb1ee4e6c77111203d8546"),
- ObjectId("53eb1ee4e6c77111203d8547"),
- ObjectId("53eb1ee4e6c77111203d8548"),
- ObjectId("53eb1ee4e6c77111203d8549"),
- ObjectId("53eb1ee4e6c77111203d854a"),
- ObjectId("53eb1ee4e6c77111203d854b"),
- ObjectId("53eb1ee4e6c77111203d854c"),
- ObjectId("53eb1ee4e6c77111203d854d"),
- ObjectId("53eb1ee4e6c77111203d854e"),
- ObjectId("53eb1ee4e6c77111203d854f"),
- ObjectId("53eb1ee4e6c77111203d8550"),
- ObjectId("53eb1ee4e6c77111203d8551"),
- ObjectId("53eb1ee4e6c77111203d8552"),
- ObjectId("53eb1ee4e6c77111203d8553"),
- ObjectId("53eb1ee4e6c77111203d8554"),
- ObjectId("53eb1ee4e6c77111203d8555")
- ]
- ]
- }
- },
- NumberInt(0)
- ]
- },
- false,
- true
- ]
- },
- "amount": "$order.tips.amount"
- }
- },
- {
- "$group": {
- "_id": "$tableTip",
- "tableTip": {
- "$first": "$tableTip"
- },
- "totalAmount": {
- "$sum": "$amount"
- },
- "totalCount": {
- "$sum": NumberInt(1)
- }
- }
- }
- ]
- },
- // ========== 4 ==========
- {
- collection: "tlogs",
- pipeline: [
- {
- "$match": {
- "_type": "tlog",
- "organization": ObjectId("53eb1ee2e6c77111203d8503"),
- "businessDate": {
- "$gte": ISODate("2015-11-01T00:00:00.000+0000"),
- "$lt": ISODate("2015-11-28T23:59:59.999+0000")
- }
- }
- },
- {
- "$unwind": "$order"
- },
- {
- "$group": {
- "_id": {
- "orderType": "$order.orderType"
- },
- "orderType": {
- "$first": "$order.orderType"
- },
- "diners": {
- "$sum": "$diners"
- },
- "totalCount": {
- "$sum": NumberInt(1)
- }
- }
- }
- ]
- },
- // 5, 6, and 7 deleted by Akira just to reduce character count within this JIRA comment.
- // ========== 8 ==========
- {
- collection: "tlogs",
- pipeline: [
- {
- "$match": {
- "_type": "tlog",
- "organization": ObjectId("53eb1ee2e6c77111203d8503"),
- "businessDate": {
- "$gte": ISODate("2015-10-01T00:00:00.000+0000"),
- "$lt": ISODate("2015-11-28T23:59:59.999+0000")
- }
- }
- },
- {
- "$unwind": "$order"
- },
- {
- "$unwind": "$order.orderedItems"
- },
- {
- "$redact": {
- "$cond": {
- "if": {
- "$and": [
- {
- "$not": "$order.orderedItems.cancellation"
- },
- {
- "$not": "$order.orderedItems.onTheHouse"
- }
- ]
- },
- "then": "$$KEEP",
- "else": "$$KEEP"
- }
- }
- },
- {
- "$unwind": "$order.orderedItems.selectedModifiers"
- },
- {
- "$group": {
- "_id": {
- "category": "$order.orderedItems.category"
- },
- "totalAmount": {
- "$sum": "$order.orderedItems.selectedModifiers.price"
- }
- }
- }
- ]
- },
- // ========== 9 ==========
- {
- collection: "tlogs",
- pipeline: [
- {
- "$match": {
- "_type": "tlog",
- "organization": ObjectId("53eb1ee2e6c77111203d8503"),
- "businessDate": {
- "$gte": ISODate("2015-10-01T00:00:00.000+0000"),
- "$lt": ISODate("2015-11-28T23:59:59.999+0000")
- },
- "order.orderType": "Refund"
- }
- },
- {
- "$unwind": "$order"
- },
- {
- "$unwind": "$order.payments"
- },
- {
- "$group": {
- "_id": null,
- "totalCount": {
- "$sum": NumberInt(1)
- },
- "totalAmount": {
- "$sum": "$order.payments.amount"
- }
- }
- }
- ]
- }
- ];
- function ISODate(x) {
- return new Date(x);
- }
- function NumberInt(x) {
- return x;
- }
|