Создание прогрессивного фильтра с Mongodb ($ или + $ и) - PullRequest
1 голос
/ 08 февраля 2020

Я совершенно новый в Mongodb. Я пытаюсь создать фильтр, все параметры которого будут необязательными, но когда пользователь передает их, результат в mongodb станет более точным

Я думал, что это будет работать, но, к сожалению, это не так:

const { name, lastName, country, jobRole } = req.query;
const user = await User.find({ $and: [
    { $or: [{ name }] },
    { $or: [{ lastName }] },
    { $or: [{ country }] },
    { $or: [{ jobRole }]}
], state: 'APPROVED' });

Я был бы очень признателен, зная, как мне добиться поведения прогрессивного фильтра.

1 Ответ

1 голос
/ 08 февраля 2020

Построить ваш запрос в JS проще, чем сложный запрос MongoDB, который без необходимости интерпретирует входные параметры:

let req = { query: { name: 1, country: 3 } };
const filters = ['name', 'lastName', 'country', 'jobRole'];
let progressive = [];

for (let filter of filters){
   let value = req.query[filter];
   if (value) {
      progressive.push({ [filter]: value })
   }
}

console.log(progressive);
const user = await User.find({ $and: [ { $or: progressive },  { state: 'APPROVED' } ] });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...