【发布时间】:2020-02-20 18:53:43
【问题描述】:
我有“实体”和“实体模板”。顶级实体与“templateId1”实体模板相关联。从那里,实体通过使用其 id 与路径中的另一个实体绑定。我试图以一种有效的方式结束以下数据结构:
const entities = [
{
id: 'xi32',
name: 'Some name',
path: ',templateId1,'
},
{
id: 'x382',
name: 'Some name 2',
path: ',templateId1,xi32,'
},
{
id: '2oxwo',
name: 'Some name 3',
path: ',templateId1,xi32,x382,'
},
{
id: '2',
name: '2',
path: ',templateId1,'
},
{
id: '2-2',
name: '2-2',
path: ',templateId1,2,'
},
{
id: '3-3',
name: '3-3',
path: ',templateId1,3,'
},
{
id: '3-3-3',
name: '3-3-3',
path: ',templateId1,3,3-3,'
},
{
id: '3-3-3-3',
name: '3-3-3-3',
path: ',templateId1,3,3-3,3-3-3,'
},
{
id: '3',
name: '3',
path: ',templateId1,'
}
];
const desiredResult = [
{
id: 'xi32',
name: 'Some name',
path: ',templateId1,',
children: [
{
id: 'x382',
name: 'Some name 2',
path: ',templateId1,xi32,',
children: [
{
id: '2oxwo',
name: 'Some name 3',
path: ',templateId1,xi32,x382,',
children: null
}
]
}
]
},
{
id: '2',
name: '2',
path: ',templateId1,',
children: [
{
id: '2-2',
name: '2-2',
path: ',templateId1,2,',
children: null
}
]
},
{
id: '3',
name: '3',
path: ',templateId1,',
children: [
{
id: '3-3',
name: '3-3',
path: ',templateId1,3,',
children: [
{
id: '3-3-3',
name: '3-3-3',
path: ',templateId1,3,3-3,',
children: [
{
id: '3-3-3-3',
name: '3-3-3-3',
path: ',templateId1,3,3-3,3-3-3,',
children: null
}
]
}
]
}
]
}
];
结构的最初灵感来自 MongoDB 文档:
https://docs.mongodb.com/manual/tutorial/model-tree-structures-with-materialized-paths/
我有一个稍微不同的用例,“实体模板”是顶级父级,但在“实体”中,用例是相同的。非常感谢任何见解。
【问题讨论】:
-
您想在 MongoDB 中还是在 JavaScript 中完成它?
-
@mickl 老实说我不确定。如果可以的话,我喜欢在数据库级别做事,因为它通常性能更高,但特别是在这两种情况下都能做到这一点会很好。这样 API 可以在需要时将其返回,并且可以在代码中创建树。
-
@MisterJojo 我尝试使用这个stackoverflow.com/questions/6232753/…,但它采用不同的结构,老实说,我很难解析其中发生的事情。我还在玩弄那个代码。
-
@MisterJojo 我的错,这是一个错误。我会编辑它。
-
@MisterJojo 我想是的,但我将它按“路径”排序,所以最短的路径排在第一位。假设它可以按任何顺序排列会很好。为了安全起见,我在代码中再次对其进行排序。
标签: javascript arrays mongodb materialized-path-pattern