4

My Documents in collection:

/* 1 createdAt:4/22/2019, 4:53:32 PM*/
{
    "_id" : ObjectId("5cbdab3c9bd57541040342a1"),
    "created_on" : "2017-03-07T21:07:04.778Z",
    "feature" : "Source",
    "feature_option" : "write",
    "icon" : "fa fa-plus",
    "is_deleted" : false,
    "level" : 2,
    "modified_on" : "2017-03-07T21:07:04.778Z",
    "name" : "Read",
    "parent_feature" : "Contact"
},

/* 2 createdAt:4/22/2019, 4:52:58 PM*/
{
    "_id" : ObjectId("5cbdab1a9bd575410403429f"),
    "created_on" : "2017-03-07T21:07:04.778Z",
    "feature" : "Source",
    "feature_option" : "read",
    "icon" : "fa fa-plus",
    "is_deleted" : false,
    "level" : 2,
    "modified_on" : "2017-03-07T21:07:04.778Z",
    "name" : "Read",
    "parent_feature" : "Contact"
},

/* 3 createdAt:5/9/2018, 8:41:42 PM*/
{
    "_id" : ObjectId("5af316b6141292374cbf363b"),
    "created_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "feature" : "Survey",
    "feature_option" : "delete",
    "icon" : "fa fa-plus",
    "is_deleted" : false,
    "level" : 2,
    "modified_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "name" : "Delete",
    "feature_id" : "1",
    "parent_feature" : null
},

/* 4 createdAt:5/9/2018, 8:41:42 PM*/
{
    "_id" : ObjectId("5af316b6141292374cbf363a"),
    "created_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "feature" : "Survey",
    "feature_option" : "edit",
    "icon" : "fa fa-plus",
    "is_deleted" : false,
    "level" : 2,
    "modified_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "name" : "Edit",
    "feature_id" : "1",
    "parent_feature" : null
},

/* 5 createdAt:5/9/2018, 8:41:42 PM*/
{
    "_id" : ObjectId("5af316b6141292374cbf3639"),
    "created_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "feature" : "Survey",
    "feature_option" : "write",
    "icon" : "fa fa-plus",
    "is_deleted" : false,
    "level" : 2,
    "modified_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "name" : "Write",
    "parent_feature" : null
},

/* 6 createdAt:5/9/2018, 8:41:42 PM*/
{
    "_id" : ObjectId("5af316b6141292374cbf3638"),
    "created_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "feature" : "Survey",
    "feature_option" : "read",
    "icon" : "fa fa-plus",
    "is_deleted" : false,
    "level" : 2,
    "modified_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "name" : "Read",
    "parent_feature" : null
},

/* 7 createdAt:5/9/2018, 8:41:27 PM*/
{
    "_id" : ObjectId("5af316a7141292374cbf3637"),
    "created_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "feature" : "Contact",
    "feature_option" : "delete",
    "icon" : "fa fa-plus",
    "is_deleted" : false,
    "level" : 2,
    "modified_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "name" : "Delete",
    "parent_feature" : "Survey"
},

/* 8 createdAt:5/9/2018, 8:41:27 PM*/
{
    "_id" : ObjectId("5af316a7141292374cbf3636"),
    "created_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "feature" : "Contact",
    "feature_option" : "edit",
    "icon" : "fa fa-plus",
    "is_deleted" : false,
    "level" : 2,
    "modified_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "name" : "Edit",
    "parent_feature" : "Survey"
},

/* 9 createdAt:5/9/2018, 8:41:27 PM*/
{
    "_id" : ObjectId("5af316a7141292374cbf3635"),
    "created_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "feature" : "Contact",
    "feature_option" : "write",
    "icon" : "fa fa-plus",
    "is_deleted" : false,
    "level" : 2,
    "modified_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "name" : "Write",
    "parent_feature" : "Survey"
},

/* 10 createdAt:5/9/2018, 8:41:27 PM*/
{
    "_id" : ObjectId("5af316a7141292374cbf3634"),
    "created_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "feature" : "Contact",
    "feature_option" : "read",
    "icon" : "fa fa-plus",
    "is_deleted" : false,
    "level" : 2,
    "modified_on" : ISODate("2017-03-08T02:07:04.778+05:00"),
    "name" : "Read",
    "parent_feature" : "Survey"
}

My current aggregation pipeline

db.feature2.aggregate([
        {
            $group: {
                _id: {
                    parent: "$parent_feature",
                    feature: "$feature"
                },
                features: { $push: "$feature_option" }
            }
        },
        {
            $group: {
                _id: "$_id.parent",
                features: { $push: { name: "$_id.feature", feature: "$features" } }
            }
        },
        {
            $project: {
                _id: 0,
                parent: "$_id",
                features: 1
            }
        }
    ]);

My current output:

   /* 1 */
{
    "features" : [
        {
            "name" : "Survey",
            "feature" : [
                "read",
                "write",
                "edit",
                "delete"
            ]
        }
    ],
    "parent" : null
},

/* 2 */
{
    "features" : [
        {
            "name" : "Source",
            "feature" : [
                "read",
                "write"
            ]
        }
    ],
    "parent" : "Contact"
},

/* 3 */
{
    "features" : [
        {
            "name" : "Contact",
            "feature" : [
                "read",
                "write",
                "edit",
                "delete"
            ]
        }
    ],
    "parent" : "Survey"
}

My desired output:

/* 1 */
{
    "features" : [
        {
            "name" : "Survey",
            "feature" : [
                "read",
                "write",
                "edit",
                "delete"
            ],
            children:[
                {
                    "name" : "Contact",
                    "feature" : [
                        "read",
                        "write",
                        "edit",
                        "delete"
                    ],
                    children:[
                        {
                            "name" : "Source",
                            "feature" : [
                                "read",
                                "write"
                            ]
                        }
                    ]
                }
            ]
        }
    ],
    "parent" : null
}

I have been working on this for a while, i tried various things but could not succeed. i have parent child relation ship in my data. What i want is, Main parent(whose parent is null mean does not have any parent) comes at the top and then i want children array inside of each of the parent. Thanks in advance!

Abdul Moiz
  • 1,317
  • 2
  • 17
  • 40
  • 3
    It is not possible to create hierarchy with mongodb even `$graphLookup` is even capable of doing only with one deep level. Still you can go with some aggregation trick https://stackoverflow.com/questions/52433933/hierarchical-queries-with-mongo-using-graphlookup – Ashh Apr 22 '19 at 13:17

0 Answers0