MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Node.js + Mongoose.js Comment obtenir la somme des commandes passées en un mois ou une semaine ?

Si vous voulez juste le total des commandes dans une période de temps, vous pouvez simplement utiliser une requête de plage sur votre date en utilisant $gte et $lt opérateurs de style :

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

query.exec(function(err, count) {

Et cela renverra simplement le nombre si les documents trouvés dans cette plage.

Si vous souhaitez additionner une valeur à l'intérieur de votre document, ou même récupérer quelque chose comme des "totaux quotidiens" à partir de cette plage de dates, vous pouvez utiliser le cadre d'agrégation pour le faire :

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

Cela utilise non seulement le $sum pour additionner les valeurs de notre champ "orderTotal", mais utilise également un agrégation de dates opérateur pour regrouper toutes les valeurs comme chaque jour dans la plage donnée.

Si ce dernier cas est ce que vous voulez, vous pouvez utiliser différents opérateurs pour décomposer les différentes périodes de date que vous souhaitez inclure dans vos résultats.