使用Mongoose Node.js过滤MongoDB数据库

编程入门 行业动态 更新时间:2024-10-24 05:21:03
本文介绍了使用Mongoose Node.js过滤MongoDB数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我需要根据一些固定标准过滤一些用户.我有一个 user 集合和一个 talent 集合.人才收藏包含对主类别收藏的引用.

I need to filter some users according to some fixed criteria. I have a user collection and a talent collection. The talent collection holds the reference to a master category collection.

我需要根据人才集合中的类别和用户集合中的某些键来过滤这些用户.

What I need is to filter these users according to the category in the talent collection and some keys from the user collection.

例如,我需要搜索一个性别为男性",教育程度为"BTech"并且具有程序员和测试员才能的用户

我的用户集合就像

{ "_id": "5f1939239bd35429ac9cd78f", "isOtpVerified": "false", "role": "user", "adminApproved": 1, "status": 0, "languages": "Malayalam, Tamil, Telugu, Kannada", "name": "Test user", "email": "test@email", "phone": "1234567890", "otp": "480623", "uid": 100015, "bio": "Short description from user", "dob": "1951-09-07T00:00:00.000Z", "gender": "Male", "education": "Btech", "bodyType": "", "complexion": "", "height": "", "weight": "", "requests": [], "location": { "place": "place", "state": "state", "country": "country" }, "image": { "avatar": "5f1939239bd35429ac9cd78f_avatar.jpeg", "fullsize": "5f1939239bd35429ac9cd78f_fullsize.png", "head_shot": "5f1939239bd35429ac9cd78f_head_shot.jpeg", "left_profile": "5f1939239bd35429ac9cd78f_left_profile.png", "right_profile": "5f1939239bd35429ac9cd78f_right_profile.png" }, "__v": 42, "createdAt": "2020-07-23T07:15:47.387Z", "updatedAt": "2020-08-18T18:54:22.272Z", }

人才收集

[ { "_id": "5f38efef179aca47a0089667", "userId": "5f1939239bd35429ac9cd78f", "level": "5", "chars": { "type": "Fresher", }, "category": "5f19357b50bcf9158c6be572", "media": [], "createdAt": "2020-08-16T08:35:59.692Z", "updatedAt": "2020-08-16T08:35:59.692Z", "__v": 0 }, { "_id": "5f3b7e6f7e322948ace30a2c", "userId": "5f1939239bd35429ac9cd78f", "level": "3", "chars": { "type": "Fresher", }, "category": "5f19359250bcf9158c6be573", "media": [ { "adminApproved": 0, "status": 0, "_id": "5f3c22573065f84a48e04a14", "file": "id=5f1939239bd35429ac9cd78f&dir=test&img=5f1939239bd35429ac9cd78f_image_undefined.jpeg", "description": "test", "fileType": "image", "caption": "test file" }, { "adminApproved": 0, "status": 0, "_id": "5f3c2d7a8c7f8336b0bfced2", "file": "id=5f1939239bd35429ac9cd78f&dir=test&img=5f1939239bd35429ac9cd78f_image_1.jpeg", "description": "this is a demo poster for testing", "fileType": "image", "caption": "A Test Poster" } ], "createdAt": "2020-08-18T07:08:31.532Z", "updatedAt": "2020-08-18T19:35:22.899Z", "__v": 2 } ]

以上文档中的类别是一个单独的类别.类别集合为

And the category in the above document is a separate one populated to this. the category collection as,

[ { "_id": "5f19359250bcf9158c6be573", "status": true, "title": "Testing", "description": "Application tester", "code": "test", "characteristics": [], "createdAt": "2020-07-23T07:00:34.221Z", "updatedAt": "2020-07-23T07:00:34.221Z", "__v": 0 }, { "status": true, "_id": "5f29829a705b4e648c28bc88", "title": "Designer", "description": "UI UX Designer", "code": "uiux", "createdAt": "2020-08-04T15:45:30.125Z", "updatedAt": "2020-08-04T15:45:30.125Z", "__v": 0 }, { "_id": "5f19357b50bcf9158c6be572", "status": true, "title": "programming", "description": "Java programmer", "code": "program", "createdAt": "2020-07-23T07:00:11.137Z", "updatedAt": "2020-07-23T07:00:11.137Z", "__v": 0 } ]

所以我的过滤条件将是

{ categories: ["5f19359250bcf9158c6be573", "5f19357b50bcf9158c6be572"], minAge: 18, maxAge: 25, minHeight: 5, maxHeight: 6, minWeight: 50, maxWeight: 80, complexion: "white", gender: "male", }

预期结果将是用户具有上述才能和条件,

And the expected result will be a user have both the above talents and followed conditions,

{ users: { ..User details.. }, medias: { ...medias from the matching talents.. } }

推荐答案

您需要使用使用管道进行$ lookup ,

  • $ match 进行类别匹配
  • 的条件
  • $ lookup 加入 users 集合
      用户收集字段的
    • $ match 条件
    • $match you condition for category match
    • $lookup to join users collection
      • $match conditions for users collections fields
      db.talents.aggregate([ { $match: { category: { $in: ["5f19359250bcf9158c6be573", "5f19357b50bcf9158c6be572"] } } }, { $lookup: { from: "users", as: "users", let: { userId: "$userId" }, pipeline: [ { $match: { $expr: { $and: [ { $eq: ["$$userId", "$_id"] }, { $eq: ["$gender", "Male"] }, { $eq: ["$education", "Btech"] } // ... add you other match criteria here ] } } } ] } }, { $match: { users: { $ne: [] } } } ])

      游乐场

更多推荐

使用Mongoose Node.js过滤MongoDB数据库

本文发布于:2023-11-22 19:16:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1618673.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据库   Node   Mongoose   MongoDB   js

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!