MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Node.js + Mongoose.js Como obter a soma dos pedidos feitos em um mês ou uma semana?


Se você quiser apenas o total de pedidos dentro de um período de tempo, basta usar uma consulta de intervalo em sua data usando $gte e $lt operadores de estilo:
var query = Model.find({ 
    "createdDate": { 
        "$gte": new Date("2014-05-21"), "$lte": new Date("2014-05-29")
    }
}).count()

query.exec(function(err, count) {

E isso apenas retornará a contagem se os documentos forem encontrados dentro desse intervalo.

Se você quiser somar um valor de dentro do seu documento ou até mesmo recuperar algo como "totais diários" desse intervalo de datas, poderá usar a estrutura de agregação para fazer isso:
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) {

Isso não apenas faz uso do $sum operador para somar os valores para nosso campo "orderTotal", mas também usa um agregação de data operador para agrupar em todos os valores como cada dia dentro do intervalo determinado.

Se esse último caso for o que você deseja, você pode usar vários operadores para dividir vários períodos de data que deseja conter em seus resultados.