在 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);
我正在尝试编写一个简单的 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);