Как преобразовать запрос запроса, чтобы исправить строку запроса MongoDB? - PullRequest
0 голосов
/ 06 мая 2020

Запрос (req.query), который я получил, имеет следующий формат:

{ duration: { gte: '5' }, difficulty: 'easy' }

Чтобы он работал в MongoDB, конечный результат должен быть таким, как показано ниже

{ duration: { $gte: 5 }, difficulty: 'easy' }

Это код, который я использую

const queryObj = { ...req.query };
let queryStr = JSON.stringify(queryObj);
queryStr = queryStr.replace(/\b(gte|lte|gt|lt)\b/g, (match) => `$${match}`);

Однако на выходе получается { duration: { '$gte': '5' }, difficulty: 'easy' }, поэтому он не работал.

{ duration: { $gte: 5 }, difficulty: 'easy' } : return every matched records
{ duration: { '$gte': '5' }, difficulty: 'easy' }: return 0 record.

Мой вопрос: как я могу удалить '' знак, чтобы его можно было использовать для строки запроса?

1 Ответ

1 голос
/ 06 мая 2020

Подход с регулярным выражением не работает с преобразованием чисел, поскольку regex обязывает вас оставаться с string. Вам нужно будет перебирать весь объект и проверять каждый ключ.

Вот очень простая рекурсивная функция, которая позволяет добиться этого: объект всегда будет «неглубоким» и просто проверьте его до определенной глубины, используя вместо этого a для l oop.

...