Node + Mongo / Mongoose текстовый поиск не занимает полный int? Можно ли отфильтровать низкие оценки по-другому? - PullRequest
3 голосов
/ 26 марта 2019

У меня есть текстовый поиск следующим образом:

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

...