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

Posted

技术标签:

【中文标题】如何获得满足 mongodb 中字段所有条件的用户?【英文标题】:How to get users that meet all of criteria for fields in mongodb? 【发布时间】:2021-05-02 22:48:39 【问题描述】:

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

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

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

【问题讨论】:

【参考方案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' 并省略性别,这将告诉 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

【讨论】:

这完全符合预期!非常感谢您的详细回复,这对我来说真的很重要。我现在了解了这个实现是如何工作的,并且在未来也会大量使用它。再次,我真诚地感谢它,谢谢! @richard59897 没问题,理查德。很高兴它有帮助。

以上是关于如何获得满足 mongodb 中字段所有条件的用户?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅在特定条件下执行 MongoDB 聚合阶段之一?

列出mongodb中某个字段的所有值

如何在mongodb中使用where条件

Access - 如何将满足条件的字段名称显示为报表中的列表

如何使用 mongoDB 条件查询在 java 中获得更干净的代码 [重复]

仅当数组中的所有元素都符合 MongoDb 中的条件时才获取文档