Mongoose не возвращает данные для агрегатной функции - PullRequest
0 голосов
/ 10 июня 2018

У меня есть маршрут, который использует следующую функцию для суммирования общего дохода от регистраций.Он отлично работает в оболочке и через Studio3T, но mongoose API ничего не возвращает.

Я использую mongoose 5.0.17 и использую Azure Cosmos DB.


exports.getDhashboard = function (req, res) {
  Registration.aggregate({
    $group: {
      _id: "$challenge.name",
      totalAmount: { $sum: "$amount" },
      count: { $sum: 1 }
    }
}, function (err, registrations) {

    if (err)
      res.send(err);
    res.json(registrations);
  });
};

Вот пример JSON из коллекции регистраций.

{
        "modified": "2018-06-09T15:43:02.288Z",
        "_id": "5b1bf5863ace0d3f54be45b4",
        "paymentState": "approved",
        "paymentTimeStamp": "2018-06-09T15:43:02.000Z",
        "paymentId": "PAY-1J368604337116737LMN7K3I",
        "payPalBuyerEmail": "kameron.berget-buyer@theitfc.com",
        "payPalBuyerId": "TTJC5ZWWEF9E6",
        "address1": "1 Main St",
        "city": "San Jose",
        "state": "CA",
        "zip": "95131",
        "paymentMethod": "paypal",
        "paymentStatus": "VERIFIED",
        "amount": 20,
        "user": "",
        "__v": 0
    },
    {
        "modified": "2018-06-10T14:58:49.422Z",
        "_id": "5b1d3ca9d586d4697021c128",
        "paymentState": "approved",
        "paymentTimeStamp": "2018-06-10T14:58:46.000Z",
        "paymentId": "PAY-0D492814K5815962PLMOTZCQ",
        "payPalBuyerEmail": "",
        "payPalBuyerId": "TTJC5ZWWEF9E6",
        "address1": "1 Main St",
        "city": "San Jose",
        "state": "CA",
        "zip": "95131",
        "paymentMethod": "paypal",
        "paymentStatus": "VERIFIED",
        "amount": 20,
        "user": "",
        "__v": 0
    }

1 Ответ

0 голосов
/ 10 июня 2018

Вы используете более старую версию агрегации ... Существует новый синтаксис для использования агрегатного конвейера в качестве массива объектов.

exports.getDhashboard = function (req, res) {
  Registration.aggregate([
    { $group: {
        _id: "$challenge.name",
        totalAmount: { $sum: "$amount" },
        count: { $sum: 1 }
    }}
  ], function (err, registrations) {
    if (err)
      res.send(err);
    res.json(registrations);
  });
};

Вы можете увидеть документы для получения дополнительной информации

...