如何获取满足 mongodb 中所有字段条件的用户?

问题描述

我正在使用 MERN 堆栈进行项目。我正在尝试让用户输入一些数据的功能,我们将根据他们输入的标准返回与他们匹配的学生。例如,如果他们输入他们想要一个 12 年级的男性并在 X 学校上学,那么我们将返回所有学校领域等于 X 学校、年级字段等于 12 和性别字段的人等于男。如果它不符合任何这些标准,则应淘汰该用户。此外,用户不必输入所有这些数据。因此,假设他们想认识 12 年级的男性,但不关心他们的学校,他们可以输入该信息,然后我们返回所有仅匹配年级和性别规范的用户。到目前为止,我已经能够使用以下代码返回所有符合等级规范的用户

 const userProfiles = await User.find({},{ grade: profileFields.grade,grade: 1 });

但是,我也想确保它们符合其他规格,如果其中之一的规格留空,我仍然希望返回符合其余规格的用户。我真的很感激任何帮助,我一直在努力解决这个问题。谢谢!

解决方法

让我们假设 profileFields 是一个携带您提到的所有标准的对象。例如

profileFields = {grade: 12,gender: 'M',school: 'X'};

有时,它可能会出现:

profileFields = {grade: 12,gender: 'M' school: ''}; //school is missing,which means select all schools

你需要做的就是从这个对象中组合一个查找查询:

const query = {};
if(profileFields.grade)
    query.grade = profileFields.grade;

if(profileFields.gender)
    query.gender = profileFields.gender;

if(profileFields.school)
    query.school = profileFields.school;

现在,例如,如果 use 输入 {grade: 12,gender: '',school: 'X'},您的查询填充看起来像这样:{grade: 12,school: 'X'} 并省略性别,这将告诉 mongodb 返回所有性别。

我可以看到你在使用猫鼬,所以...

User.find(query)
    .then(users => {
        //Your matched users will be in variable users
        console.out(users)
    })

请注意,我在这里做了一些假设。例如,您的用户架构实际上具有名为 gender schoolgrade 的字段。如果成绩字段被命名为 user_grade,那么您的查询程序集将更改为 query.user_grade = profileFields.grade