创buildmongodb对象的思维导图

我想从模型分支,有“父”和“孩子”价值的思维导图。 看起来像 :

Branches = [{ children: {}, _id: String, parent: { type: Schema.Types.ObjectId, ref: 'Branch' } }] 

我想得到像这样的东西:

 [ { "_id": "599c1f79f339dc3991d8250a", "name": "Robert", "children": [ { "_id": "599c1f82f339dc3991d8250b", "name": "Robert 1", "parent": "599c1f79f339dc3991d8250a", "children": [ { "_id": "599c1f8ff339dc3991d8250c", "name": "Robert 2", "parent": "599c1f82f339dc3991d8250b", "children": [ { "_id": "599c2b7373a7d43e5205af1f", "name": "Robert 4", "parent": "599c1f8ff339dc3991d8250c", "__v": 0, "shareholder": [], "createdDate": "2017-08-22T13:02:43.290Z", "children": [] } ], "__v": 0, "shareholder": [], "createdDate": "2017-08-22T12:11:59.230Z" }, { "_id": "599c1f9df339dc3991d8250d", "name": "Robert 3", "parent": "599c1f82f339dc3991d8250b", "children": [], "__v": 0, "shareholder": [], "createdDate": "2017-08-22T12:12:13.156Z" } ], "__v": 0, "shareholder": [], "createdDate": "2017-08-22T12:11:46.938Z" } ], "__v": 0, "parent": null, "shareholder": [], "createdDate": "2017-08-22T12:11:37.005Z" } 

]”

如果一个对象的值为父“1”,则具有_id:“1”的分支必须将其放在子对象内。 我现在的代码是:

 Branch.find((err, foundedBranches) => { function createTree(branch) { function inner(parent) { return branch.filter(x => x.parent === parent) .map(x => { x.children = inner(x._id) return x }) } return inner(null) } let formated = createTree(branches) res.json(formated) 

如果您知道如何解决这个问题,请帮忙:/

那么像这样的事情 – 你会得到每个入门的孩子

 // All items from database const dataFromDatabase = // ... // For each item, go and look for childrens const finalMap = dataFromDatabase.map((x) => { children: this.getChildren(dataFromDatabase, x._id), _id: x._id, // ... }); 

 // Get all children and for theses children go for children aswell (recursive)... getChildren(all, id) { return all.reduce((tmp, x) => { if (x.parent === id) { return [ ...tmp, { children: this.getChildren(all, x._id), _id: x._id, // ... }, ]; } return tmp; }, []); } 

如果你想input只出现一次,在开始筛选条目只得到头(条目,没有,父)

 dataFromDatabase.filter(x => !x.parent).map((x) => {