Для оценки текстового поиска Node Mongo / Мангуст не требуется полное значение int? Возможно ли отфильтровать низкие оценки другим способом?

#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 может не принимать для этого целые числа?