Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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.

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

my user collection is like,

{
    "_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",
}

Talent collection

[
    {
        "_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
        }
    ]

So my filter terms will be;

{
    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.. }
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
139 views
Welcome To Ask or Share your Answers For Others

1 Answer

If there are two collections you need to join them either by primary key or _id with foriegn fields and you can use $lookup with $match to filter down. Documentation


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...