问题标签 [materialized-path-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
413 浏览

django - 如何在模板中将 django-treebeard MP 显示为下拉菜单?

按照treebeard docs api示例,我使用get_annotated_list(parent=None, max_depth=None)with parent=<my root node>创建了我的树的 annotated_list 。我将它传递给我的模板并使用他们在文档中归因于 Alexey Kinyov 的示例,我能够使用成功显示我的树

我想要的是能够提供这些嵌套列表下拉功能。借鉴w3schools 上的这个标准示例,我对其进行了修改以使用我的annotated_list模板变量并最终得到以下结果:

我的代码几乎可以工作,但似乎没有显示最左边节点的子节点,我不知道为什么。

注意:CSS 和 JS 不包括在内,但需要使下拉菜单工作(我只是使用 w3schools 示例中使用的开箱即用的 CSS/JS)

0 投票
1 回答
481 浏览

sql - 通过物化路径查询SQL中的邻接表

我在 Microsoft SQL Server (2019) 中使用邻接列表模型(例如 、 )存储了一个大型层次结构(2,500 多条记录IdParentId。我正在寻找一种有效的方法来根据层次结构中的特定路径查找记录。换句话说,给定一个路径(例如/Root/FolderA/SubfolderA),我想检索Id与最终节点关联的(即,SubfolderA在这种情况下)。

注意:节点名称不是全局唯一的。即,我们不能只寻找SubfolderA并假设它映射到/Root/FolderA/SubfolderA. SubfolderA层次结构中可能有多个节点。

设置

等级制度

结构

数据

天真的方法

关于如何将邻接列表转换为物化路径有很多线程,包括:

看法

我们可以使用其中一种方法来使用 rCTE将整个邻接列表转换为物化路径:

输出

这会产生以下输出:

询问

我们可以使用一个简单的WHERE子句过滤该输出:

问题

天真的方法效果很好。问题是查询大型层次结构的效率非常低,因此速度很慢,因为它需要在每次调用时动态重建整个物化路径集。就我而言,这需要 8-9 秒。显然,我可以将这些数据存储在一个表中,并在数据更改的任何时候通过触发器重新生成它。但我宁愿找到更有效的查询并避免额外的复杂性。

问题

构建此查询的有效方法是什么?或者,冒着使这成为 XY 问题的风险,有没有办法限制 rCTE,使其只需要评估层次结构中的节点,而不是每次都重建整个层次结构?

0 投票
0 回答
161 浏览

django - 使用 django treebeard 在 django 中实现分层系统

我正在尝试实现一个基于网络的组织教会系统,该系统具有如图所示的层次结构。

我想使用 django treebeard 物化路径来实现系统。

我希望树上的每个节点都是教堂的一个实例,树中的单个教堂也可以管理其内容,管理员也可以登录,用户可以登录他们所属的教堂。

我还需要父节点能够访问子节点的一些数据。

这可能吗?如果您有任何想法或线索,请提供帮助。提前致谢。

这是树的图

0 投票
1 回答
350 浏览

nestjs - 如何使用带有 typeorm 的物化路径树结构加载树

我有一个具有“物化路径”树结构的实体。

我正在尝试加载孩子。它给出了一个空的子对象下面是实体

获取树元素的代码

加载后得到的结果,子对象内没有数据

请让我知道我哪里出错了。

0 投票
0 回答
17 浏览

tree - 选择哪种树策略来保存兄弟位置?

在一个节点内,当孩子的位置很重要时,采用哪种树模式(邻接表、物化路径、嵌套集、闭包表等)来存储和获取按这些位置排序的整棵树?就易用性和性能而言,哪个是最好的?

例子

给定这些分层数据:

我希望能够切换给定节点的位置Node 1.1Node 1.2存储新结果。那么获取的更新树应该是: