如何解决使用Mongoose Node.js过滤MongoDB数据库
我需要根据一些固定条件过滤一些用户。我有一个 user 集合和一个 talent 集合。人才收藏包含对主类别收藏的引用。
我需要根据人才集合中的类别和用户集合中的某些键来过滤这些用户。
For example I need to search for a user whose gender is 'male' and education 'BTech' and will have talents as a programmer and tester
我的用户集合就像
{
"_id": "5f1939239bd35429ac9cd78f","isOtpVerified": "false","role": "user","adminApproved": 1,"status": 0,"languages": "Malayalam,Tamil,Telugu,Kannada","name": "Test user","email": "test@email.com","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","level": "3","category": "5f19359250bcf9158c6be573","media": [
{
"adminApproved": 0,"_id": "5f3c22573065f84a48e04a14","file": "id=5f1939239bd35429ac9cd78f&dir=test&img=5f1939239bd35429ac9cd78f_image_undefined.jpeg","description": "test","fileType": "image","caption": "test file"
},{
"adminApproved": 0,"_id": "5f3c2d7a8c7f8336b0bfced2","file": "id=5f1939239bd35429ac9cd78f&dir=test&img=5f1939239bd35429ac9cd78f_image_1.jpeg","description": "this is a demo poster for testing","caption": "A Test Poster"
}
],"createdAt": "2020-08-18T07:08:31.532Z","updatedAt": "2020-08-18T19:35:22.899Z","__v": 2
}
]
以上文档中的类别是一个单独的类别。类别集合为
[
{
"_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",{
"_id": "5f19357b50bcf9158c6be572","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",}
预期结果将是用户具有上述才能和条件,
{
users: { ..User details.. },medias: { ...medias from the matching talents.. }
}
解决方法
如果有两个collections
,则需要join
或primary key
来_id
和前域,并且可以将$lookup
与{{1 }进行过滤。
Documentation
您需要使用$lookup with pipeline,
-
<td> @Html.ActionLink("Edit","Edit",new { /* id=item.PrimaryKey */ }) | @Html.ActionLink("Details","Details",new { /* id=item.PrimaryKey */ }) | @Html.ActionLink("Delete","Delete",new { /* id=item.PrimaryKey */ }) </td>
,您需要进行$match
比赛 -
category
加入$lookup
集合-
users
用户集合字段的条件
-
-
$match
排除未找到符合条件中传递的条件$match
的文档
users
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。