Имея этот рабочий код:
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 в этом атласе уровень "