Я запускаю агрегацию текстового поиска по коллекции, и все хорошо, однако я хочу отображать только 20 результатов за раз, поскольку текстовый поиск будет иметь сотни совпадений, а в большинстве случаев то, что вы ищете, будетбыть в числе 20 лучших результатов.
До сих пор я имел успех, используя 2 группы и в течение первой просто нажимая $$ ROOT для следующей группы, но проблема в том, что часть $ limit больше не применяетсяв качестве формы результата будет 1 документ со свойством, которое содержит ВСЕ результаты.
Пример:
{ $match: { $text: { $search: body.searchTerms } } },
{ $sort: { $score: { $meta: 'textScore' } } },
{ $group: { id_: null, resultsCount: { $sum: 1 }, documents: { "$push": "$$ROOT" } },
{
$group: {
_id: '$site.UNID',
title: { $first: '$title' },
}
},
{ $match: { score: { $gt: matchScore } } },
{ $limit: 20 },
{
$project: {
UPRN: '$documents.UPRN',
title: '$documents.title',
}
}
Запрос может быть не на 100% правильным, так как я потерял эту первоначальную версию - но проблема в том, что оператор $ limit работает с внутренними документами, а не скорневой результат.