Как получить 3 уровня иерархического представления данных в той же коллекции MongoDB - PullRequest
0 голосов
/ 28 мая 2019

У меня есть одна коллекция, известная как Skills:

Skills:
 {  
       "_id":ObjectId("5cebbfbe09ce114302cd6028"),
       "name":"Java",
       "level":1.0,
       "status":"Approved",
       "parentId":"",
       "createDate":   ISODate("2019-05-27T10:45:18.904   Z"),
       "modifiedDate":   ISODate("2019-05-27T10:45:18.904   Z"),
       "createdBy":"Admin",
       "modifiedBy":"Admin"
    }/* 2 */{  
       "_id":ObjectId("5cebbfbe09ce114302cd6029"),
       "name":"Springs",
       "level":1.0,
       "status":"Approved",
       "parentId":ObjectId("5cebbfbe09ce114302cd6028"),
       "createDate":   ISODate("2019-05-27T10:45:18.904   Z"),
       "modifiedDate":   ISODate("2019-05-27T10:45:18.904   Z"),
       "createdBy":"Admin",
       "modifiedBy":"Admin"
    }/* 3 */{  
       "_id":ObjectId("5cebbfbe09ce114302cd602a"),
       "name":"Struts",
       "level":1.0,
       "status":"Approved",
       "parentId":ObjectId("5cebbfbe09ce114302cd6028"),
       "createDate":   ISODate("2019-05-27T10:45:18.904   Z"),
       "modifiedDate":   ISODate("2019-05-27T10:45:18.904   Z"),
       "createdBy":"Admin",
       "modifiedBy":"Admin"
    }/* 4 */{  
       "_id":ObjectId("5cebc0538a5ce6ceea9ce8f1"),
       "name":"MVC",
       "level":1.0,
       "status":"Approved",
       "parentId":ObjectId("5cebbfbe09ce114302cd602a"),
       "createDate":   ISODate("2019-05-27T10:47:47.684   Z"),
       "modifiedDate":   ISODate("2019-05-27T10:47:47.684   Z"),
       "createdBy":"Admin",
       "modifiedBy":"Admin"
    }

Java является родительским документом для Spring, а Struts и Struts являются родительским документом для MVC.Я хочу получить 3 уровня иерархических данных из той же коллекции.Или, если у вас есть какие-либо предложения по разработке схемы, пожалуйста, поделитесь ими.Я попробовал это с использованием структуры агрегации, но не получил ожидаемого результата.Я использовал $lookup stage.

db.skills.aggregate([  
   {  
      $project:{  
         name:1,
         level:1,
         status:1
      }
   },
   {  
      $lookup:{  
         from:"skills",
         localField:"_id",
         foreignField:"parentId",
         as:"Data"
      }
   }
]) 

Я хочу вывод таким образом:

"_id":ObjectId("5cebbfbe09ce114302cd6028"),
"name":"Java",
"level":1.0,
"status":"Approved",
Data:[  
   {  
      "_id":ObjectId("5cebbfbe09ce114302cd6029"),
      "name":"Springs",
      "level":1.0,
      "status":"Approved"
   },
   {  
      "_id":ObjectId("5cebbfbe09ce114302cd602a"),
      "name":"Struts",
      "level":1.0,
      "status":"Approved",
      Data:[  
         {  
            "_id":ObjectId("5cebc0538a5ce6ceea9ce8f1"),
            "name":"MVC",
            "level":1.0,
            "status":"Approved"
         }
      ]``
   }
]
...