Mongo / Express: как вернуть все документы в коллекции, если не переданы параметры запроса? - PullRequest
2 голосов
/ 18 мая 2019

Я пытаюсь вернуть все документы из моей коллекции Mongo, если параметры запроса не переданы. В настоящее время у меня есть 3 необязательных параметра запроса, которые могут быть переданы пользователем.

localhost:3000/api/projects

//should return all projects. Currently this is returning []
localhost:3000/api/projects?id=1

//should return projects with id of "1". Working properly.
localhost:3000/api/projects?name=myproject

//should return projects with name of "myproject". Working properly.
localhost:3000/api/projects?created_by=John

//should return projects created by "John". Working properly.

В рамках моего маршрута я пытаюсь определить, что в моем запросе есть какие-либо значения запроса. Если это не так, то я хочу вернуть все документы в коллекции. Как указано выше, это ничего не возвращает.

router.get('/', async (req, res) => {
    if (req.query !== '') {
        const project = await Projects.find({
            $or: [
                { _id: req.query.id },
                { name: req.query.name },
                { created_by: req.query.created_by }]
        });
        res.json(project);
    }
    else {
        const project = await Projects.find();
        res.json(project);
    }
});

Ответы [ 3 ]

1 голос
/ 18 мая 2019

Попробуйте, как показано ниже:

router.get('/', async (req, res) => {
        let searchQuery = {}

        if(req.query.id){
            searchQuery._id = req.query.id
        }

        if(req.query.name){
            searchQuery.name = req.query.name
        }

        if(req.query.created_by){
            searchQuery.created_by = req.query.created_by
        }

        const project = await Projects.find(searchQuery);
        res.json(project);
});
0 голосов
/ 19 мая 2019
router.get('/', async (req, res) => {

const id = req.query.id || null;
const name = req.query.name || null;
const created_by = req.query.created_by || null;

const query = { id, name, created_by };
const project = await Projects.find(query);
res.json(project); 
});

Я не проверял это, но я решил бы вашу проблему таким образом.

0 голосов
/ 18 мая 2019

Вы можете написать свой обработчик API следующим образом:

router.get('/', async (req, res)=>{
  let options = {...req.query};
  try{
    const project = await Projects.find(options);
    res.json(project);
  }catch(e){
    console.log(e);
  }

});

При этом будут получены документы на основе вашего запроса. Если параметры запроса отсутствуют, req.query будет пустым объектом и, следовательно, найдет все документы. Надеюсь, это поможет !!

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