Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何获得满足mongodb中所有字段标准的用户?_Node.js_Database_Mongodb_Mongoose_Mern - Fatal编程技术网

Node.js 如何获得满足mongodb中所有字段标准的用户?

Node.js 如何获得满足mongodb中所有字段标准的用户?,node.js,database,mongodb,mongoose,mern,Node.js,Database,Mongodb,Mongoose,Mern,我正在使用MERN堆栈进行一个项目。我尝试使用一个函数,用户输入一些数据,我们将根据输入的标准返回与之匹配的学生。例如,如果他们输入他们想要的人是男性,12年级,进入X学校,那么我们返回所有学校字段等于X学校,年级字段等于12,性别字段等于男性的人。如果它不符合这些标准中的任何一个,则应该删除该用户。此外,用户不必输入所有这些数据。如果他们想认识一个12年级的男性,但不关心他们的学校,他们可以输入,然后我们返回所有符合年级和性别规格的用户。到目前为止,我已经能够使用以下代码返回所有符合等级规范的

我正在使用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

,这完全符合预期!非常感谢您的详细回复,这对我来说意义重大。我现在了解了这个实现是如何工作的,并将在将来大量使用它。再次,我衷心感谢,谢谢@没问题,理查德。很高兴它起到了作用。这完全符合预期!非常感谢您的详细回复,这对我来说意义重大。我现在了解了这个实现是如何工作的,并将在将来大量使用它。再次,我衷心感谢,谢谢@没问题,理查德。很高兴这有帮助。