GaneshVidiyala Ответов: 1

Как получить данные в древовидной структуре в mongodb


Привет

у нас есть обязательное отображение данных в древовидном формате.


выборочные данные:


db.FamilyTree.insert({"id":"100", "ParentName":"Jhon Smith", "Children" : "Michael Smith" })
db.FamilyTree.insert({"id":"100", "Diana Smith":"Jhon Smith", "Children" : "Diana Smith"})
db.FamilyTree.insert({"id":"101", "ParentName":"Michael Smith", "Children" : ""})
db.FamilyTree.insert({"id":"102", "ParentName":"Diana Smith", "Children" : "Britney Smith"})
db.FamilyTree.insert({"id":"301", "ParentName":"Britney Smith", "Children" : ""})
db.FamilyTree.insert({"id":"200", "ParentName":"Richard Smith", "Children" : "M Smith" })
db.FamilyTree.insert({"id":"200", "ParentName":"Richard Smith", "Children" : "D Smith" })
db.FamilyTree.insert({"id":"201", "ParentName":"M Smith", "Children" : "" })
db.FamilyTree.insert({"id":"202", "ParentName":"D Smith", "Children" : "" })



выходные данные о данных должны быть такими, как показано ниже:

   [
   {
      "id":"100",
      "name":"Jhon Smith",
      "children":[
         {
            "id":"101",
            "name":"Michael Smith",
            "children":null
         },
         {
            "id":"102",
            "name":"Diana Smith",
            "children":[
               {
                  "id":"301",
                  "name":"Britney Smith",
                  "children":null
               }
            ]
         }
      ]
   },
   {
      "id":"200",
      "name":"Richard Smith",
      "children":[
         {
            "id":101,
            "name":"Michael Smith",
            "children":null
         },
         {
            "id":"102",
            "name":"Diana Smith",
            "children":null
         }
      ]
   }
]


Что я уже пробовал:

I Have tried with $graphLookup but I didn't get required output:


<pre>db.FamilyTree.aggregate( [
        { $project: { _id: 0}},
   { 
      $graphLookup: {
         from: "FamilyTree",
         startWith: "$Children",
         connectFromField: "Children",
         connectToField: "ParentName",
         as: "TreeSearch"

     
      }
   }
] )



Пожалуйста, поделитесь, если вы уже сталкивались с таким сценарием.

Gerry Schmitz

дБ.Семейное древо.вставить({"идентификатор":"100", "Диана Смит":"Джон Смит", "Дети" : "Диана Смит"})

Не следует "шаблону".

1 Ответов

Рейтинг:
0

Sandeep Mewara

Пока у вас есть данные с сохранением отношения родитель - потомок, вы можете их показывать. Из примера видно, что у вас есть эти данные на месте.

Следующие ссылки помогут вам понять, как это сделать:
Хранение древовидных структур в MongoDB: примеры кода[^]

Основанный на: Модельные древовидные структуры с массивом предков — руководство MongoDB[^]

Теперь, с graphlookup вы попробовали, аналогичную попытку несколько лет назад кто-то сделал: MongoDB $graphLookup пытается получить древовидную структуру - переполнение стека[^].
Модели в MongoDB дерево: сделать всех предков, сделать все потомки - переполнение стека [^]

Цитата:
$graphLookup не создает иерархию зависимостей - он выполняет рекурсивный поиск связанных документов, но результаты сглаживаются в одномерный массив

Это не даст вам структуру, которую вы ищете. Лучше хранить его в виде структуры древовидной модели, разделяемой выше, чтобы получить его обратно.