Совокупный запрос Mongoskin выдает ошибку, отлично работает в mongo cli

Итак, у меня есть довольно простой запрос монго, в котором я пытаюсь вернуть список уникальных лет из коллекции. У меня есть совокупный запрос, который я построил с помощью mongo CLI, и он возвращает результаты, которые я ищу:

db.rides.aggregate([{'$group': {_id: {year: {'$year': '$date'}}}},{'$sort' : {'_id.year' : -1}}])

Когда я подключаю это к своему экспресс-приложению, которое использует mongoskin в качестве драйвера базы данных, оно выдает ошибку

db.collection('rides').aggregate([{'$group': {_id: {year: {'$year': '$date'}}}},{'$sort' : {'_id.year' : -1}}]).toArray(function(err, years) {
    res.json(years);
});

Ошибка:

TypeError: Cannot read property 'readPreference' of undefined
at Collection.aggregate (/Users/Shared/projects/fitness-tracker/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/collection/aggregation.js:260:17)
at EventEmitter.<anonymous> (/Users/Shared/projects/fitness-tracker/node_modules/mongoskin/lib/utils.js:120:34)
at EventEmitter.g (events.js:180:16)
at EventEmitter.emit (events.js:98:17)
at /Users/Shared/projects/fitness-tracker/node_modules/mongoskin/lib/utils.js:169:27
at Db.collection (/Users/Shared/projects/fitness-tracker/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/db.js:503:44)
at EventEmitter.<anonymous> (/Users/Shared/projects/fitness-tracker/node_modules/mongoskin/lib/collection.js:51:21)
at EventEmitter.g (events.js:180:16)
at EventEmitter.emit (events.js:98:17)
at /Users/Shared/projects/fitness-tracker/node_modules/mongoskin/lib/utils.js:169:27

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

Спасибо


person SDG    schedule 16.11.2014    source источник


Ответы (1)


Ваш запрос агрегации syntax неверен, он должен принимать функцию callback, как показано ниже:

db.collection('rides').aggregate([{'$group': {_id: {year: {'$year': '$date'}}}},
    {'$sort' : {'_id.year' : -1}}],function(err, years) {
    console.log(years);
});

и обработайте ответ в функции callback. Там вы получите результирующий массив.

person BatScream    schedule 16.11.2014
comment
Прекрасно - работает отлично Просто предположил, что агрегат вернул объект, которому требовался вызов toArray() - не знал, что он принял обратный вызов. Виноват. Спасибо. - person SDG; 16.11.2014