Node.js 如何获得满足mongodb中所有字段标准的用户?
我正在使用MERN堆栈进行一个项目。我尝试使用一个函数,用户输入一些数据,我们将根据输入的标准返回与之匹配的学生。例如,如果他们输入他们想要的人是男性,12年级,进入X学校,那么我们返回所有学校字段等于X学校,年级字段等于12,性别字段等于男性的人。如果它不符合这些标准中的任何一个,则应该删除该用户。此外,用户不必输入所有这些数据。如果他们想认识一个12年级的男性,但不关心他们的学校,他们可以输入,然后我们返回所有符合年级和性别规格的用户。到目前为止,我已经能够使用以下代码返回所有符合等级规范的用户:Node.js 如何获得满足mongodb中所有字段标准的用户?,node.js,database,mongodb,mongoose,mern,Node.js,Database,Mongodb,Mongoose,Mern,我正在使用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;
例如,现在,如果使用输入{grade:12,gender:'',school:X'}
,则查询填充如下:{grade:12,school:X'}
,并省略gender,这将告诉mongodb返回所有gender
我知道你在用猫鼬,所以
User.find(query)
.then(users => {
//Your matched users will be in variable users
console.out(users)
})
注意,我在这里做了一些假设。例如,您的用户模式实际上包含名为
gender
school
和grade
的字段。如果grade字段被命名为,比如说,user\u grade
,那么您的查询程序集将更改为query.user\u grade=profileFields.grade
让我们假设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;
例如,现在,如果使用输入{grade:12,gender:'',school:X'}
,则查询填充如下:{grade:12,school:X'}
,并省略gender,这将告诉mongodb返回所有gender
我知道你在用猫鼬,所以
User.find(query)
.then(users => {
//Your matched users will be in variable users
console.out(users)
})
注意,我在这里做了一些假设。例如,您的用户模式实际上包含名为
gender
school
和grade
的字段。如果等级字段被命名,比如说,user\u grade
,那么您的查询程序集将更改为query.user\u grade=profileFields.grade
,这完全符合预期!非常感谢您的详细回复,这对我来说意义重大。我现在了解了这个实现是如何工作的,并将在将来大量使用它。再次,我衷心感谢,谢谢@没问题,理查德。很高兴它起到了作用。这完全符合预期!非常感谢您的详细回复,这对我来说意义重大。我现在了解了这个实现是如何工作的,并将在将来大量使用它。再次,我衷心感谢,谢谢@没问题,理查德。很高兴这有帮助。