MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Node.js + Mongoose.js Come ottenere la somma degli ordini effettuati in un mese o in una settimana?

Se desideri solo il totale degli ordini entro un periodo di tempo, puoi semplicemente utilizzare una query di intervallo nella tua data utilizzando $gte e $lt operatori di stile:

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

query.exec(function(err, count) {

E questo restituirà solo il conteggio se i documenti sono stati trovati all'interno di quell'intervallo.

Se vuoi sommare un valore dall'interno del tuo documento, o addirittura recuperare qualcosa come "totali giornalieri" da quell'intervallo di date, puoi utilizzare il framework di aggregazione per farlo:

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) {

Ciò non solo fa uso di $sum operatore per sommare i valori per il nostro campo "orderTotal", ma utilizza anche un aggregazione di date operatore per raggruppare tutti i valori come ogni singolo giorno all'interno dell'intervallo specificato.

Se l'ultimo caso è quello che desideri, puoi utilizzare vari operatori per suddividere i vari periodi di date che desideri contengano nei tuoi risultati.