Получение данных мусора, когда не проецируется _id mongodb - PullRequest
3 голосов
/ 15 апреля 2019

Ниже приведено в моем запросе для создания организационной иерархии,

db.org.aggregate([
    {
        $group:{
            _id: {
                parent: "$parent",
                level: "$level"
            },
            level_data: {$push:{name: "$name", id: "$_id"}}
        }
    },
    {
        $group:{
            _id: "$_id.level",
            data: {$push: {parent: "$_id.parent", nodes: "$level_data"}}
        }
    },
    {
        $sort:{
            _id: 1
        }
    },
    {
        $project:{
            //_id: 0,
            level: "$_id",
            data: 1
        }
    }
]);

Мой ответ:

/* 1 */
{
    "_id" : 1,
    "data" : [
        {
            "parent" : "null",
            "nodes" : [
                {
                    "name" : "MBC",
                    "id" : ObjectId("5c7523efa2f2163114f9feb6")
                }
            ]
        }
    ],
    "level" : 1
},

/* 2 */
{
    "_id" : 2,
    "data" : [
        {
            "parent" : "MBC",
            "nodes" : [
                {
                    "name" : "National",
                    "id" : ObjectId("5c7523efa2f2163114f9feb7")
                }
            ]
        }
    ],
    "level" : 2
},

/* 3 */
{
    "_id" : 3,
    "data" : [
        {
            "parent" : "National",
            "nodes" : [
                {
                    "name" : "QUEBEC/MARITIMES",
                    "id" : ObjectId("5c7523efa2f2163114f9febd")
                },
                {
                    "name" : "PRAIRIES",
                    "id" : ObjectId("5c7523efa2f2163114f9febc")
                },
                {
                    "name" : "ONTARIO",
                    "id" : ObjectId("5c7523efa2f2163114f9febb")
                },
                {
                    "name" : "GTA",
                    "id" : ObjectId("5c7523efa2f2163114f9feba")
                },
                {
                    "name" : "GMA",
                    "id" : ObjectId("5c7523efa2f2163114f9feb9")
                },
                {
                    "name" : "BRITISH COLUMBIA",
                    "id" : ObjectId("5c7523efa2f2163114f9feb8")
                }
            ]
        }
    ],
    "level" : 3
}

Мой ответ, когда я откомментировал _id: 0 на последней стадии проекта

/* 1 */
{
    "data" : [
        {
            "parent" : "null",
            "nodes" : [
                {
                    "name" : "MBC",
                    "id" : {
                        "data" : "\u0016\u0000\u0000\u0000\u0007obj\u0000\\u#ï¢ò\u00161\u0014ùþ¶\u0000"
                    }
                }
            ]
        }
    ],
    "level" : {
        "data" : "\u0012\u0000\u0000\u0000\u0001obj\u0000\u0000\u0000\u0000\u0000\u0000\u0000ð?\u0000"
    }
},

/* 2 */
{
    "data" : [
        {
            "parent" : "MBC",
            "nodes" : [
                {
                    "name" : "National",
                    "id" : {
                        "data" : "\u0016\u0000\u0000\u0000\u0007obj\u0000\\u#ï¢ò\u00161\u0014ùþ·\u0000"
                    }
                }
            ]
        }
    ],
    "level" : {
        "data" : "\u0012\u0000\u0000\u0000\u0001obj\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000"
    }
},

/* 3 */
{
    "data" : [
        {
            "parent" : "National",
            "nodes" : [
                {
                    "name" : "QUEBEC/MARITIMES",
                    "id" : {
                        "data" : "\u0016\u0000\u0000\u0000\u0007obj\u0000\\u#ï¢ò\u00161\u0014ùþ½\u0000"
                    }
                },
                {
                    "name" : "PRAIRIES",
                    "id" : {
                        "data" : "\u0016\u0000\u0000\u0000\u0007obj\u0000\\u#ï¢ò\u00161\u0014ùþ¼\u0000"
                    }
                },
                {
                    "name" : "ONTARIO",
                    "id" : {
                        "data" : "\u0016\u0000\u0000\u0000\u0007obj\u0000\\u#ï¢ò\u00161\u0014ùþ»\u0000"
                    }
                },
                {
                    "name" : "GTA",
                    "id" : {
                        "data" : "\u0016\u0000\u0000\u0000\u0007obj\u0000\\u#ï¢ò\u00161\u0014ùþº\u0000"
                    }
                },
                {
                    "name" : "GMA",
                    "id" : {
                        "data" : "\u0016\u0000\u0000\u0000\u0007obj\u0000\\u#ï¢ò\u00161\u0014ùþ¹\u0000"
                    }
                },
                {
                    "name" : "BRITISH COLUMBIA",
                    "id" : {
                        "data" : "\u0016\u0000\u0000\u0000\u0007obj\u0000\\u#ï¢ò\u00161\u0014ùþ¸\u0000"
                    }
                }
            ]
        }
    ],
    "level" : {
        "data" : "\u0012\u0000\u0000\u0000\u0001obj\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b@\u0000"
    }
}

Ниже приведен пример структуры моего документа:

/* 1 createdAt:2/26/2019, 4:33:03 PM*/
{
    "_id" : ObjectId("5c7523efa2f2163114f9fefe"),
    "name" : "813",
    "parent" : "QUEBEC/MARITIMES",
    "level" : 4
},

/* 2 createdAt:2/26/2019, 4:33:03 PM*/
{
    "_id" : ObjectId("5c7523efa2f2163114f9fefd"),
    "name" : "551",
    "parent" : "QUEBEC/MARITIMES",
    "level" : 4
},

/* 3 createdAt:2/26/2019, 4:33:03 PM*/
{
    "_id" : ObjectId("5c7523efa2f2163114f9fefc"),
    "name" : "550",
    "parent" : "QUEBEC/MARITIMES",
    "level" : 4
},
{
    "_id" : ObjectId("5c7523efa2f2163114f9feba"),
    "name" : "GTA",
    "parent" : "National",
    "level" : 3
},

/* 70 createdAt:2/26/2019, 4:33:03 PM*/
{
    "_id" : ObjectId("5c7523efa2f2163114f9feb9"),
    "name" : "GMA",
    "parent" : "National",
    "level" : 3
},

/* 71 createdAt:2/26/2019, 4:33:03 PM*/
{
    "_id" : ObjectId("5c7523efa2f2163114f9feb8"),
    "name" : "BRITISH COLUMBIA",
    "parent" : "National",
    "level" : 3
},
{
    "_id" : ObjectId("5c7523efa2f2163114f9feb7"),
    "name" : "National",
    "parent" : "MBC",
    "level" : 2
},

/* 73 createdAt:2/26/2019, 4:33:03 PM*/
{
    "_id" : ObjectId("5c7523efa2f2163114f9feb6"),
    "name" : "MBC",
    "parent" : "null",
    "level" : 1
}

Как вы можете видеть на последнем этапе проекта, _id закомментирован, потому что, когда я выключаю его проекцию, он искажает мой вывод. Иначе все работает нормально.

Ответ и документы приведены только для справки.

...