1

I have this collection in MongoDB in this Structure.Now I need to query the on this data to get the relatedPeople with weight 60. I searched on this but found noting specific most query give data using $ symbol but it gives you rootnode but not the info that which nested node is maching.

{
        "_id": "7686348264868327",
        "Name": "myName",
        "phoneNo": "12434576896",
        "ExtraDetails": {
            "TotalPeople": 10,
            "activePeople": 8,
            "lostPeople": 2,
            "relatedPeople": [{
                    "Name": "reev",
                    "Relation": "Father",
                    "Weight": 60
                },
                {
                    "Name": "magen2",
                    "Relation": "Mother",
                    "Weight": 60
                },
                {
                    "Name": "neo",
                    "Relation": "Gardian",
                    "Weight": 70
                }

            ]
        }
    }
    {
        "_id": "76866898698798",
        "Name": "myName2",
        "phoneNo": "867867868",
        "ExtraDetails": {
            "TotalPeople": 8,
            "activePeople": 6,
            "lostPeople": 2,
            "relatedPeople": [{
                    "Name": "amazing",
                    "Relation": "Father",
                    "Weight": 60
                },
                {
                    "Name": "caring",
                    "Relation": "Mother",
                    "Weight": 90
                },
                {
                    "Name": "neo",
                    "Relation": "Gardian",
                    "Weight": 75
                }

            ]
        }
    }

The Output Should be Something Like This

"relatedPeople":[
{
                        "Name": "reev",
                        "Relation": "Father",
                        "Weight": 60
                    },
                    {
                        "Name": "magen2",
                        "Relation": "Mother",
                        "Weight": 60
                    },
                    {
                        "Name": "amazing",
                        "Relation": "Father",
                        "Weight": 60
                    }

]

Or

[{
                            "Name": "reev",
                            "Relation": "Father",
                            "Weight": 60
                        },
                        {
                            "Name": "magen2",
                            "Relation": "Mother",
                            "Weight": 60
                        },
                        {
                            "Name": "amazing",
                            "Relation": "Father",
                            "Weight": 60
                        }]

1 Answer 1

1

You can try following solution:

db.collection.aggregate([
    { $match: { "ExtraDetails.relatedPeople.Weight": 60 }  },
    { $project: { "ExtraDetails.relatedPeople": 1 } },
    { $unwind: "$ExtraDetails.relatedPeople" },
    { $match: { "ExtraDetails.relatedPeople.Weight": 60 }  },
    { $replaceRoot: { newRoot: "$ExtraDetails.relatedPeople" } }
])

I'm using $unwind to query relatedPeople as a separate documents in $match and $replaceRoot to get rid of nestings.

Alternatively, to get first expected shape you can use $group with $push:

db.collection.aggregate([
    { $match: { "ExtraDetails.relatedPeople.Weight": 60 }  },
    { $project: { "ExtraDetails.relatedPeople": 1 } },
    { $unwind: "$ExtraDetails.relatedPeople" },
    { $match: { "ExtraDetails.relatedPeople.Weight": 60 }  },
    {
       $group: {
         _id: null,
         relatedPeople: { $push: "$ExtraDetails.relatedPeople" }
       }
    },
    { $project: { _id: 0 } }
])
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.