#node.js #mongodb #mongoose #aggregation-framework
#node.js #mongodb #мангуст #aggregation-framework
Вопрос:
У меня есть текстовый поиск следующим образом:
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, если количество слов не равно 1;
По какой-то причине кажется, что ему не нравится, если у меня там полное число, как в, 1 вместо 1.0, что для меня не имеет смысла, поскольку они практически одинаковы.
Я знаю, что должен включить документы в саму совокупность, но я все еще осваиваюсь с этим и пока не добился успеха в своих попытках.
РЕДАКТИРОВАТЬ: если я просто добавлю req.body.WordsCount — 0.5, это сработает… как mongodb / mongoose может не принимать для этого целые числа?