如何获取满足 mongodb 字段的所有条件的用户?
How to get users that meet all of criteria for fields in mongodb?
我正在使用 MERN 堆栈开发一个项目。我正在尝试让用户输入一些数据的功能,我们将 return 学生根据他们输入的标准与他们匹配。例如,如果他们说他们想要一个男性,12 年级,上 X 学校,那么我们 return 所有学校字段等于学校 X,年级字段等于 12 的人,和一个等于男性的性别字段。如果它不符合任何这些标准,则应淘汰该用户。此外,用户不必输入所有这些数据。所以说他们想见一个 12 年级的男性,但不关心他们的学校,他们可以输入那个,然后我们 return 所有匹配年级和性别规范的用户。到目前为止,我已经能够 return 所有符合等级规范的用户使用以下代码:
const userProfiles = await User.find({}, { grade: profileFields.grade, grade: 1 });
但是,我也想确保它们满足其他规格,如果其中一个规格留空,我仍然希望 return 满足其余规格的用户。我真的很感激任何帮助,我已经尝试解决这个问题一段时间了。谢谢!
让我们假设 profileFields
是一个包含您提到的所有这些标准的对象。例如
profileFields = {grade: 12, gender: 'M', school: 'X'};
虽然有时,它可能会出现:
profileFields = {grade: 12, gender: 'M' school: ''}; //school is missing, which means select all schools
您需要做的就是assemble来自这个对象的查找查询:
const query = {};
if(profileFields.grade)
query.grade = profileFields.grade;
if(profileFields.gender)
query.gender = profileFields.gender;
if(profileFields.school)
query.school = profileFields.school;
所以现在,例如,如果使用输入 {grade: 12, gender: '', school: 'X'}
,您的查询填充如下所示:{grade: 12, school: 'X'}
并省略性别,这将告诉 mongodb 到 return 所有性别。
我看到你在使用 mongoose,所以...
User.find(query)
.then(users => {
//Your matched users will be in variable users
console.out(users)
})
请注意,我在这里做了一些假设。例如,您的用户架构实际上具有名为 gender
school
和 grade
的字段。如果成绩字段被命名为 user_grade
,那么您的查询程序集将更改为 query.user_grade = profileFields.grade
我正在使用 MERN 堆栈开发一个项目。我正在尝试让用户输入一些数据的功能,我们将 return 学生根据他们输入的标准与他们匹配。例如,如果他们说他们想要一个男性,12 年级,上 X 学校,那么我们 return 所有学校字段等于学校 X,年级字段等于 12 的人,和一个等于男性的性别字段。如果它不符合任何这些标准,则应淘汰该用户。此外,用户不必输入所有这些数据。所以说他们想见一个 12 年级的男性,但不关心他们的学校,他们可以输入那个,然后我们 return 所有匹配年级和性别规范的用户。到目前为止,我已经能够 return 所有符合等级规范的用户使用以下代码:
const userProfiles = await User.find({}, { grade: profileFields.grade, grade: 1 });
但是,我也想确保它们满足其他规格,如果其中一个规格留空,我仍然希望 return 满足其余规格的用户。我真的很感激任何帮助,我已经尝试解决这个问题一段时间了。谢谢!
让我们假设 profileFields
是一个包含您提到的所有这些标准的对象。例如
profileFields = {grade: 12, gender: 'M', school: 'X'};
虽然有时,它可能会出现:
profileFields = {grade: 12, gender: 'M' school: ''}; //school is missing, which means select all schools
您需要做的就是assemble来自这个对象的查找查询:
const query = {};
if(profileFields.grade)
query.grade = profileFields.grade;
if(profileFields.gender)
query.gender = profileFields.gender;
if(profileFields.school)
query.school = profileFields.school;
所以现在,例如,如果使用输入 {grade: 12, gender: '', school: 'X'}
,您的查询填充如下所示:{grade: 12, school: 'X'}
并省略性别,这将告诉 mongodb 到 return 所有性别。
我看到你在使用 mongoose,所以...
User.find(query)
.then(users => {
//Your matched users will be in variable users
console.out(users)
})
请注意,我在这里做了一些假设。例如,您的用户架构实际上具有名为 gender
school
和 grade
的字段。如果成绩字段被命名为 user_grade
,那么您的查询程序集将更改为 query.user_grade = profileFields.grade