1.1.0 • Published 6 years ago
mongodb-stats v1.1.0
Simple, async, ES6 based module to get statistics quickly from mongodb by dates to chartjs
Scope
- aggregate by today, week, month and etc
- stats by created or updated field
Requirements
- some project/API based on express with using mongodb, mongoose
- collections with rows which contains
created,updatedfields - client with chartjs
Install
npm install mongodb-statsExamples
- Define your stats schema
const schema = {
dateFields: {
createdAt: 'createdAt', // field in your collection
updatedAt: 'updatedAt',
},
};- Create some route
stats - Define stats object:
const MongoStats = require('mongodb-stats');
const AnySchema = require('../../models/any.schema');
const mongoStat = MongoStats(schema);- Example route:
exports.stats = async (req, res, next) => {
try {
const View = MongooseModel.collection.conn.model('View', AnySchema);
const Click = MongooseModel.collection.conn.model('Click', AnySchema);
const data = await mongoStat.stat(req, [View, Click]);
res.json(data);
} catch (error) {
console.log(error)
return next(error);
}
};That`s all Folks
Let`s collect the data
On Client
Get /stats request to get data
Example:
GET /stats?type=t
type=w - by week
type=m - by month
avg=FIELD_NAME - avg by fieldname
max=FIELD_NAME - max value by fieldname
search[k]=val - advanced filter options
If you have a lot of data and they are constantly being added, then by default this response will be built.
[num,num,num,num,num....]
If there is old data then you need to add a limit
limit=1000 - limit if you get old stats
ldate=date.toISOString - last date, offset by date
, then such a response will return
[{d,val},{d,val},{d,val}]
where d - last date, val - stat value
TODO
- sum aggregation
- parse from, to params
- pass models by collection names