$пропуск и $лимит работают не так, как ожидалось в mongodb aggregate

#javascript #mongodb #aggregation-framework

Вопрос:

Поэтому я начал использовать платформу mongodb aggregate несколько дней назад, поэтому я внедрил метод $limit и $skip в свой проект, подобный этому :

 let content = await dataSources.WarehouseItem.aggregate([  { $match: {} },  { $limit: 2 },  {  $group: {  _id: "$productName",  quantity: { $first: "$quantity" },  },  },  ]);  

Но этот код вместо того , чтобы возвращать 2 документа , он возвращает только 1, но когда я ставлю 3, он возвращает 2, а когда я ставлю 4, он возвращает 3 и так далее, и метод пропуска также работает не так, как ожидалось, внутри этой базы данных есть 4 документа, но он не возвращает 3, когда я это делаю :

 let content = await dataSources.WarehouseItem.aggregate([  { $match: {} },  { $skip: 1 },  {  $group: {  _id: "$productName",  quantity: { $last: "$quantity" },  },  },  ]);  

он возвращает все 4 документа

Комментарии:

1. Я думаю, что вы должны добавить этапы пропуска и ограничения после группового этапа. т. Е. ваши $skip $limit этапы и должны быть последним этапом в конвейере агрегации.

2. Спасибо , что все сработало идеально, об этом не упоминалось в документации

3. группа возвращает 1 документ для каждой группы. поэтому, если у вас есть 4 разных имени продукта, вы получите 4.

4. @Takis_ правильно указал. Помните, что порядок этапов в конвейере агрегации MongoDB имеет значение, и выходные данные одного этапа передаются в качестве входных данных для следующего этапа