我正在尝试学习猫鼬,我来自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));
});
答案 0 :(得分:1)
“之间”部分已正确实现,但是$group需要_id
值。如果要获取整个文档的单个汇总,可以将其设置为null
:
{$group: { _id: null, dieselGallons: {'$sum': '$comdataPurchase'}}}