总和列,在猫鼬的日期字段之间

时间:2020-01-15 01:59:44

标签: mongodb mongoose

我正在尝试学习猫鼬,我来自SQL背景并且在弄清楚这是如何工作时遇到了困难。

所以我实质上是想在Mongoose中运行此SQL代码

$sql = "SELECT SUM(comdataPurchase)
              FROM fuel566243
              WHERE fuelDate BETWEEN '$startDate' AND '$endDate';";

但是我无法使它在猫鼬中正常工作。这是我到目前为止所拥有的。

FuelReceipt.aggregate([{$match:{date:{$gte: fuelStart, $lt: fuelEnd}}},
                {$group:{truckNumber: truckNumber, dieselGallons:{'$sum': '$count'}}}]).exec(function(err, data){
                    if(err){
                        console.log('Error Fetching Model');
                        console.log(err);
                    }
                    console.log(data);
                });

预先感谢您的帮助<3

编辑:-------------

这有效:

FuelReceipt.aggregate([
                {$group:{_id: '$truckNumber', 
                         dieselGallons:{$sum: '$dieselGallons'}}}]).exec(function(err, data){
                    if(err){
                        console.log('Error Fetching Model');
                        console.log(err);
                    }
                    console.log(JSON.stringify(data, null));
                });

这给出了空数组:

FuelReceipt.aggregate([
                {$match:{date:{$gte: fuelStart, $lte: fuelEnd}}},
                {$group:{_id: '$truckNumber', 
                         dieselGallons:{$sum: '$dieselGallons'}}}]).exec(function(err, data){
                    if(err){
                        console.log('Error Fetching Model');
                        console.log(err);
                    }
                    console.log(JSON.stringify(data, null));
                });

编辑2:----------------

我发现了这一点,不得不更改开始日期和结束日期的数据类型。

FuelReceipt.aggregate([
                {$match:{date:{$gte: new Date(fuelStart), $lte: new Date(fuelEnd)}}},
                {$group:{_id: '$truckNumber', 
                         fuelCost:{$sum: '$fuelCost'}}}]).exec(function(err, data){
                    if(err){
                        console.log('Error Fetching Model');
                        console.log(err);
                    }
                    res.send(data);
                    console.log(JSON.stringify(data, null));
                });

1 个答案:

答案 0 :(得分:1)

“之间”部分已正确实现,但是$group需要_id值。如果要获取整个文档的单个汇总,可以将其设置为null

{$group: { _id: null, dieselGallons: {'$sum': '$comdataPurchase'}}}