如何在 MongoDB 中进行搜索查询
How to make a search query in MongoDB
我在一个名为 Profiles 的 collection 中有配置文件。我正在查询以根据用户搜索配置文件
提供的字段。搜索表单(UI 表单),用户有不同的选项来搜索个人资料,例如 'female' 或 'male' 或 'Any',然后单击“搜索”按钮。这样,用户可以通过提供以下字段的组合来搜索我的 collection 个人资料。
- 性别
- 国家
- 城市
- 婚姻状况
- 教育
- 宗教
因此,例如用户选择的字段为:性别:'Female'、国家:'Pakistan'、城市:'Islamabad'、婚姻状况:'Any'、教育:'Any', 宗教: 'Islam' 那么 MongoDB 的查询内容是什么?
我需要对所有情况进行动态查询。
到目前为止我试过了:
Profile.find(
{
gender: req.body.gender,
country: req.body.country,
city: req.body.city,
maritalStatus: req.body.maritalStatus,
education: req.body.education,
religion: req.body.religion
},
{},
function(err, profiles){
if(profiles!=null)
{ res.status(200).json({status: true, message:'Profile(s) found', profiles})}
else
{res.status(404).json({status: false, message:'No profile(s) found.'})}
}
);
但上述查询并非对所有情况都是动态的。
只需提取 req.body
对象中存在的字段并将它们添加到一个对象中。该对象将用于过滤查询结果
const filter = Object.entries(req.body)
.reduce((acc, curr) => (acc[curr[0]] = curr[1], acc), {});
最后您将得到一个 filter
对象,其中仅包含用户选择的那些属性。您可以在查询中传递此过滤器对象
Profile.find(filter, {}, function(err, profiles) {
if(profiles!=null)
return res.status(200).json({status: true, message:'Profile(s) found', profiles});
res.status(404).json({status: false, message:'No profile(s) found.'});
});
我在一个名为 Profiles 的 collection 中有配置文件。我正在查询以根据用户搜索配置文件 提供的字段。搜索表单(UI 表单),用户有不同的选项来搜索个人资料,例如 'female' 或 'male' 或 'Any',然后单击“搜索”按钮。这样,用户可以通过提供以下字段的组合来搜索我的 collection 个人资料。
- 性别
- 国家
- 城市
- 婚姻状况
- 教育
- 宗教
因此,例如用户选择的字段为:性别:'Female'、国家:'Pakistan'、城市:'Islamabad'、婚姻状况:'Any'、教育:'Any', 宗教: 'Islam' 那么 MongoDB 的查询内容是什么?
我需要对所有情况进行动态查询。
到目前为止我试过了:
Profile.find(
{
gender: req.body.gender,
country: req.body.country,
city: req.body.city,
maritalStatus: req.body.maritalStatus,
education: req.body.education,
religion: req.body.religion
},
{},
function(err, profiles){
if(profiles!=null)
{ res.status(200).json({status: true, message:'Profile(s) found', profiles})}
else
{res.status(404).json({status: false, message:'No profile(s) found.'})}
}
);
但上述查询并非对所有情况都是动态的。
只需提取 req.body
对象中存在的字段并将它们添加到一个对象中。该对象将用于过滤查询结果
const filter = Object.entries(req.body)
.reduce((acc, curr) => (acc[curr[0]] = curr[1], acc), {});
最后您将得到一个 filter
对象,其中仅包含用户选择的那些属性。您可以在查询中传递此过滤器对象
Profile.find(filter, {}, function(err, profiles) {
if(profiles!=null)
return res.status(200).json({status: true, message:'Profile(s) found', profiles});
res.status(404).json({status: false, message:'No profile(s) found.'});
});