У меня есть текстовый поиск следующим образом:
const matches = await Site.aggregate([
{
$match: {
clientId: req.user.client_id,
$text: { $search: req.body.searchTerms }
}
},
{
$project: {
_id: 0,
score: { $meta: 'textScore' }
}
},
{
$match: {
score: { $gt: req.body.wordsCount }
}
},
{ $group: { _id: null, myCount: { $sum: 1 } } },
{ $sort: { score: { $meta: 'textScore' } } }
]);
const sites = await Site.find(
{
clientId: req.user.client_id,
$text: { $search: req.body.searchTerms }
},
{ score: { $meta: 'textScore' } },
{
$match: {
score: { $gt: req.body.wordsCount }
}
}
)
.sort({ score: { $meta: 'textScore' } })
.limit(20);
Я в основном получаю:
- Количество совпадений
- Массив фактических документов
И я пытаюсь добавить более строгие критерии соответствия на счет, но, кажется, я не могу просто ввести число, как я видел в моих собственных тестах, это зависит от общего количестваслова, которые вы ищете, поэтому я хочу, чтобы совпадением всегда было wordsCount - 1, если wordscount не равно 1;
По какой-то причине кажется, что мне не нравится, когда у меня есть полное число, например, 1 вместо 1,0, что для меня не имеет смысла, поскольку они практически одинаковы.
Я знаю, что я должен включить документы в сам агрегат, но я все еще в курсе этого и пока не добился успеха в моих попытках.
РЕДАКТИРОВАТЬ: Если я просто добавлю req.body.wordsCount - 0.5 это работает ... как mongodb / mongoose может не принимать целые числа для этого?