Analytics mongdb queries

This commit is contained in:
Matt Lott 2014-12-15 13:36:45 -08:00
parent 30c1b7b31a
commit 604bc48506
4 changed files with 168 additions and 0 deletions

View file

@ -0,0 +1,26 @@
// Print out gem counts bucketed by day and amount
// NOTE: created is a string and not an ISODate in the database
var match={
"$match" : {
"stripe.subscriptionID" : { "$exists" : false }
}
};
var proj0 = {"$project": {
"amount": 1,
"created": { "$concat": [{"$substr" : ["$created", 0, 4]}, "-", {"$substr" : ["$created", 5, 2]}, "-", {"$substr" : ["$created", 8, 2]}]}
}
};
var group={"$group" : {
"_id" : {
"m" : "$amount",
"d" : "$created"
},
"count" : {
"$sum" : 1
}
}
};
var sort = {$sort: { "_id.d" : -1}};
db.payments.aggregate(match, proj0, group, sort).result.forEach( function (myDoc) { print({day: myDoc._id.d, amount: myDoc._id.m, count: myDoc.count}) })

View file

@ -0,0 +1,29 @@
// Print out signup conversions since a start Date
var started = finished = 0.0
var startDate = new ISODate("2014-12-07T00:00:00.000Z")
db['analytics.log.events'].aggregate(
[
{ $match :
{ $and: [
{created : { $gte: startDate}},
{$or: [ {"event" : 'Started Signup'}, {"event" : 'Finished Signup'}]}
]}
},
{
$group : {
_id: "$event",
total: {$sum: 1}
}
},
{ $sort : { total : -1} }
]
).result.forEach( function (myDoc) {
//print(myDoc)
if (myDoc._id === "Started Signup")
started += myDoc.total;
else
finished += myDoc.total;
})
print("Signups", started, finished);
print("Signup Conversion:", (finished / started * 100), "%");

View file

@ -0,0 +1,85 @@
// Print out signup conversions per day
var match={
"$match" : {
$or: [ {"event" : 'Started Signup'}, {"event" : 'Finished Signup'}]
}
};
proj1={"$project" : {
"_id" : 0,
"created" : 1,
"event" : 1,
"h" : {
"$hour" : "$created"
},
"m" : {
"$minute" : "$created"
},
"s" : {
"$second" : "$created"
},
"ml" : {
"$millisecond" : "$created"
}
}
};
var proj2={"$project" : {
"_id" : 0,
"event" : 1,
"created" : {
"$subtract" : [
"$created",
{
"$add" : [
"$ml",
{
"$multiply" : [
"$s",
1000
]
},
{
"$multiply" : [
"$m",
60,
1000
]
},
{
"$multiply" : [
"$h",
60,
60,
1000
]
}
]
}
]
}
}
};
var group={"$group" : {
"_id" : {
"m" : "$event",
"d" : "$created"
},
"count" : {
"$sum" : 1
}
}
};
var conversionsPerDay = {};
var sort = {$sort: { "_id.d" : -1}};
db['analytics.log.events'].aggregate(match, proj1, proj2, group, sort).result.forEach( function (myDoc) {
// print({day: myDoc._id.d, amount: myDoc._id.m, count: myDoc.count})
if (!conversionsPerDay[myDoc._id.d])
conversionsPerDay[myDoc._id.d] = {}
conversionsPerDay[myDoc._id.d][myDoc._id.m] = myDoc.count;
})
for (key in conversionsPerDay) {
print(key, conversionsPerDay[key]['Started Signup'], conversionsPerDay[key]['Finished Signup'], conversionsPerDay[key]['Finished Signup'] / conversionsPerDay[key]['Started Signup']);
// print("Signup Conversion:", (finished / started * 100), "%");
}

View file

@ -0,0 +1,28 @@
// Print out subscription counts bucketed by day and amount
// NOTE: created is a string and not an ISODate in the database
var match={
"$match" : {
"stripe.subscriptionID" : { "$exists" : true }
}
};
var proj0 = {"$project": {
"amount": 1,
"created": { "$concat": [{"$substr" : ["$created", 0, 4]}, "-", {"$substr" : ["$created", 5, 2]}, "-", {"$substr" : ["$created", 8, 2]}]}
}
};
var group={"$group" : {
"_id" : {
"m" : "$amount",
"d" : "$created"
},
"count" : {
"$sum" : 1
}
}
};
var sort = {$sort: { "_id.d" : -1}};
//db.payments.aggregate(match, proj0, proj1, proj2, group)
db.payments.aggregate(match, proj0, group, sort).result.forEach( function (myDoc) { print({day: myDoc._id.d, amount: myDoc._id.m, count: myDoc.count}) })
//db.payments.aggregate(match)
//db.payments.find()