Объедините несколько вариантов поиска в один в MongoDB и node.js - PullRequest
0 голосов
/ 14 июля 2020

Имея этот рабочий код:

const aggregateOptions = [];

// search by name
if (req.query.name) {
  aggregateOptions.push({ $match: { name: { $regex: req.query.name, $options: 'i' } } });
}

// search by surname
if (req.query.surname) {
  aggregateOptions.push({ $match: { surname: req.query.surname } });
}

// search by nationality
if (req.query.nationality) {
  aggregateOptions.push({ $match: { nationality: req.query.nationality } });
}

Он отвечает за построение запроса для поиска. Проблема в том, что они работают отдельно, и я хочу иметь возможность писать строку в строке поиска и код для поиска по всем 3 полям.

Например, как сейчас есть строка поиска для name, и когда я пишу "my_string", он проверяет, есть ли имя = "my_string", и я хочу проверить их все.

Что-то вроде name = "my_string" OR surname = "my_string" OR nationality = "my_string".

Итак, я использовал $ или и написал следующее:

  aggregateOptions.push({
      $or: [
        { nationality: req.query.nationality },
        { surname: req.query.surname },
        { name: { $regex: req.query.name, $options: 'i' } },
      ],
    });

, что кажется неправильным и возвращает это сообщение об ошибке: "$ or is not allowed в этом атласе уровень "

1 Ответ

0 голосов
/ 14 июля 2020

Для этого можно использовать текстовый поиск. В пн go вы можете создать текстовый индекс с национальностью, фамилией и именем, например,

db.collection.createIndex( { nationality: "text", surname: "text", name: "text" } )

Теперь вы можете запросить свою коллекцию с помощью чего-то вроде

db.collection.find({$text: { $search:req.query.name } })

, который будет выполните текстовый поиск по всем 3 полям и верните любые совпадения.

Вот некоторые ресурсы:

https://docs.mongodb.com/manual/core/index-text/ https://docs.mongodb.com/manual/reference/operator/query/text/ Надеюсь, это помогает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...