Агрегирование MongoDB и Node.js с использованием $ sample не возвращает документ - PullRequest
0 голосов
/ 08 февраля 2019

Я новичок в Nodejs и mongoDB и пытаюсь запустить агрегатную функцию, которая выберет случайный документ из базы данных и вернет его.Я просмотрел весь интернет, чтобы выяснить, что я делаю неправильно, и из того, что я вижу, мой код выглядит так, как должен.Однако по какой-то причине, когда я пытаюсь распечатать результат на консоли, он дает мне объект курсора агрегации, и я не могу найти нужный мне документ внутри него.Вот мой код для агрегатной функции.

//get a random question
route.get('/question/random', function (req, res) {
database.collection('questions').aggregate(
    [ { $sample: { size: 1} } ],
    function(err, result) {
        console.log(result);
    })
})

1 Ответ

0 голосов
/ 08 февраля 2019

Это потому, что метод агрегирования возвращает AggregationCursor , который не будет возвращать никаких документов, если вы не выполните итерацию.

Для простой итерации вы можете сделать:

database.collection('questions').aggregate([{$sample: {size: 1}}]).forEach(console.log);

Метод forEach() на курсоре будет повторять его и в этом примере выводит его на консоль.

...