#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 имеет значение, и выходные данные одного этапа передаются в качестве входных данных для следующего этапа