Ошибка: аргументы должны быть агрегированными конвейерными операторами в Aggregate.append - PullRequest
0 голосов
/ 22 января 2020

Это трассировка стека, которую предоставляет мое приложение:

Error: Arguments must be aggregate pipeline operators
at Aggregate.append (/Users/flywheel/zprojects/whatsgood/the-ashevillian/node_modules/mongoose/lib/aggregate.js:89:11)
at new Aggregate (/Users/flywheel/zprojects/whatsgood/the-ashevillian/node_modules/mongoose/lib/aggregate.js:48:17)
at Function.aggregate (/Users/flywheel/zprojects/whatsgood/the-ashevillian/node_modules/mongoose/lib/model.js:2415:17)
at Function.storeSchema.statics.getTopStores (/Users/flywheel/zprojects/whatsgood/the-ashevillian/models/Store.js:82:15)
at exports.getTopStores (/Users/flywheel/zprojects/whatsgood/the-ashevillian/controllers/storeController.js:198:30)
at /Users/flywheel/zprojects/whatsgood/the-ashevillian/handlers/errorHandlers.js:11:12
at Layer.handle [as handle_request] (/Users/flywheel/zprojects/whatsgood/the-ashevillian/node_modules/express/lib/router/layer.js:95:5)
at next (/Users/flywheel/zprojects/whatsgood/the-ashevillian/node_modules/express/lib/router/route.js:137:13)
at Route.dispatch (/Users/flywheel/zprojects/whatsgood/the-ashevillian/node_modules/express/lib/router/route.js:112:3)
at Layer.handle [as handle_request] (/Users/flywheel/zprojects/whatsgood/the-ashevillian/node_modules/express/lib/router/layer.js:95:5)
at /Users/flywheel/zprojects/whatsgood/the-ashevillian/node_modules/express/lib/router/index.js:281:22
at Function.process_params (/Users/flywheel/zprojects/whatsgood/the-ashevillian/node_modules/express/lib/router/index.js:335:12)
at next (/Users/flywheel/zprojects/whatsgood/the-ashevillian/node_modules/express/lib/router/index.js:275:10)
at Function.handle (/Users/flywheel/zprojects/whatsgood/the-ashevillian/node_modules/express/lib/router/index.js:174:3)
at router (/Users/flywheel/zprojects/whatsgood/the-ashevillian/node_modules/express/lib/router/index.js:47:12)

Соответствующий код - это единственные два места, которые агрегат вызывается во всем приложении:

Store . js

storeSchema.statics.getTagsList = function() {
  return this.aggregate([
    { $unwind: '$tags' },
    { $group: { _id: '$tags', count : { $sum: 1 } }},
    { $sort: { count: -1} }
  ]);
};

storeSchema.statics.getTopStores = function (){
  return this.aggregate([
      // Look up stores and populate reviews
    { $lookup: { from: 'reviews', localField: '_id',
      foreignField: 'store', as: 'reviews'}},
      // Filter for stores with 2 or more reviews
    { $match: { 'reviews.1': { $exists: true } }},
      // Add average reviews field
      // TODO: Changed with $addfield in mongodb 3.4?
      // UPDATE
    { $project: {
        photo: '$$ROOT.photo',
        name: '$$ROOT.name',
        reviews: '$$ROOT.reviews',
        slug: '$$ROOT.slug',
        averageRating: { $avg: '$reviews.rating' }
      } },
    // sort it by our new field, highest reviews first
    { $sort: { averageRating: -1 }},
    // limit to at most 10
    { $limit: 10 }
  ])
};

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

Вы можете глубоко погрузиться в хранилище на https://github.com/airbr/whatsgood если вы sh.

1 Ответ

0 голосов
/ 22 января 2020

Решением было обновить Mon goose до версии 5.0.

Кроме того, мне пришлось добавить упоминания парсера URL, как в этом ответе:

Avoid "строка текущего URL предупреждение "parser устарело", установив для useNewUrlParser значение true

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