Node.js + Mongoose.js ¿Cómo obtener la sum de los pedidos realizados en un mes o una semana?

Encuentro el marco agregado, pero ¿cómo obtener los donativos en un mes o una semana? Estoy intentando calcular cuántas órdenes se colocan en una semana o en un mes. Los documentos son así:

{ "_id" : ObjectId("53834167b54a3b22f0079e2c"), "createdDate" : ISODate("2014-05-26T13:28:07.942Z"), "__v" : 0 }, { "_id" : ObjectId("53834167b54a3b22f0079e2c"), "createdDate" : ISODate("2014-05-28T09:28:07.942Z"), "__v" : 0 } 

Lo único que quiero tener es cuántas órdenes se colocan en un mes según la fecha de creación.

El código actual que estoy usando:

 Order.aggregate([ { "$match": { 'createdDate': { "$gte": new Date("2014-05-25"), "$lte": new Date("2014-05-27") } }}, { "$group": { "_id": { "$dayOfYear": "$createdDate" }, "totalCost": { "$sum": "$totalCost" }, "sum": {"$sum": 1} }} ], function(err, result) { console.log(result); if (err) { res.send(400, err); } else { res.send(200, result); } }); 

Si solo desea las órdenes totales dentro de un período de tiempo, puede usar una consulta de rango en su fecha usando los operadores de estilo $gte y $lt :

 var query = Model.find({ "createdDate": { "$gte": new Date("2014-05-21"), "$lte": new Date("2014-05-29") } }).count() query.exec(function(err, count) { 

Y eso solo devolverá el conteo si los documentos se encuentran dentro de ese rango.

Si desea sumr un valor dentro de su documento, o incluso recuperar algo como “totales diarios” dentro de ese rango de fechas, puede usar el marco de agregación para hacer esto:

 Model.aggregate([ { "$match": { "$gte": new Date("2014-05-21"), "$lte": new Date("2014-05-29") }}, { "$group": { "_id": { "$dayOfYear": "$createdDate" } "totalValue": { "$sum": "$orderTotal" } }} ], function(err, result) { 

Eso no solo hace uso del operador $sum para sumr los valores de nuestro campo “orderTotal”, sino que también utiliza un operador de agregación de fecha para agrupar todos los valores como cada día dentro del rango dado.

Si ese último caso es lo que desea, puede usar varios operadores para dividir los distintos períodos de fecha que desee incluir en sus resultados.