Пн goose агрегат не дает ответа - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь мон goose агрегировать для группировки предприятий. У меня работает скрипт MongoDB. Я прилагаю скрипт NodeJS с Mon goose, а также код MongoDB ниже:

 History.aggregate()
        .cursor({ batchSize: 1000 })
        .group({
            _id: "$businessName",
            transactions: {
                $push: "$$ROOT"
            },
            numberOfTransactions: {
                $sum: 1
            }
        })
        .exec(function (err, transactions) {
            if (err) {
                res.json({
                    "message": err.message
                });
            } else if (transactions) {
                // winston.info(transactions);
                res.send(
                    transactions
                );
            }
        });

Рабочий код MongoDb:

db.getCollection('transactionhistories')
        .aggregate([ 
        {$group:
            {_id:"$businessName", transactions:{$push:"$$ROOT"},numberOfTransactions: { $sum: 1 }},
         },
        {$sort:{businessId:1}}

            ]).toArray()

Я не получаю никакого ответа, когда используя первый код. Может кто-нибудь помочь? Заранее спасибо!

1 Ответ

0 голосов
/ 13 февраля 2020

Используемый вами метод .cursor({ batchSize: 1000 }) заставит агрегатный вызов вернуть курсор, поэтому обратный вызов даже не будет выполнен. Источник .

Вы должны использовать курсор для доступа к результату агрегации:

const cursor = Todo.aggregate()
  .cursor({ batchSize: 1000 })
  .group({
    _id: "$name",
    transactions: {
      $push: "$$ROOT"
    },
    numberOfTransactions: {
      $sum: 1
    }
  })
  .exec();

cursor.eachAsync(function (doc) {
  console.log('doc: ', doc);
});

Подробнее о том, как использовать курсоры здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...