在 nodeJS 和 mongoDB 中使用查询字符串过滤 API

Filter like API using query string in nodeJS and mongoDB

我正在尝试编写一个简单的 API 使用过滤器从数据库中获取用户。我想通过给定的特定参数过滤此数据,这些参数是可选的:

如何通过查询 API 无参数、单参数和多参数来灵活地从数据库中获取数据?

控制器:-

方法一

const articles = await userTable.find({
    '$or': [{
        'name': req.query.name
     },
     {
       'address': req.query.address
     },
     {
       'address': req.query.address,
       'name': req.query.name
     }]
  });

当我点击单个参数时它给出正确的响应但是当我点击多个参数时http://localhost:4000/api/filter?name=abhishek&address=tejaji它给出错误的响应但我只想要包含名称 abhishek 和地址 tejaji 的那一行

方法二

const articles = await userTable.find({
    name:req.query.name,address:req.query.address,
    $or: [ { name:req.query.name }, {address:req.query.address } ]
});

当我点击单个参数时它给出 0 响应但是当我点击多个参数时http://localhost:4000/api/filter?name=abhishek&address=tejaji它给出正确的响应但是我也想要来自单个参数的结果

方法三

const articles = await userTable.find({
  'usertables': {
        $elemMatch: {
          'name': req.query.name,
          'address': req.query.address
        }
    }
});

当我点击单个参数 http://localhost:4000/api/filter?name=abhishek 或多个 http://localhost:4000/api/filter?name=abhishek&address=tejaji 它总是给出来自 table 的所有行,这是错误的。

路线:-

router.get("/filter", userController.filterMethod);

尝试使用 filter 对象并根据存在的参数向其添加键:

const { name, address } = req.query;
const filter = {}
if (name) {
    filter.name = name 
}
if (address) {
    filter.address = address
}
const articles = await userTable.find(filter);