Столбец суммы между полями дат в Mongoose - PullRequest
1 голос
/ 15 января 2020

Я пытаюсь выучить пн goose, я из SQL фона, и мне трудно понять, как это работает.

Итак, я пытаюсь запустить этот код SQL в понедельник goose

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

Но я не могу заставить его работать должным образом в понедельник goose. Вот что у меня есть.

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 </p>

edit: -------------

Это работает:

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));
                });

edit 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 Ответ

1 голос
/ 15 января 2020

Часть «между» реализована правильно, однако $ group требует значения _id. Вы можете установить его на null, если хотите получить единый агрегат для всего набора документов:

{$group: { _id: null, dieselGallons: {'$sum': '$comdataPurchase'}}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...