首页 > 解决方案 > Mongo/Express:如果没有通过查询参数,如何返回集合中的所有文档?

问题描述

如果没有传递查询参数,我正在尝试从我的 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);
    }
});

标签: node.jsmongodbexpressmongooserequest

解决方案


尝试如下:

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);
});

推荐阅读