问题标签 [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 投票
0 回答
6030 浏览

mysql - MySQL中的嵌套集模型与物化路径

刚刚开始使用 mysql 进行我的第一个大型(ish)项目,技术知识非常有限。我面临着一个似乎很常见的问题,即如何表示我的树层次结构。我已经通过谷歌广泛地使用并开始使用嵌套集模型绘制项目,但左右列之间至少有 1000 个值。在深入研究之前,我想对更有经验的人可能会推荐什么有一个基本的了解。

我的项目涉及 4 个级别的节点,这些节点将用于搜索功能以缩小产品制造商的范围。每个级别都有几个选项。一种路径可能是:

  • 规格组(父)
    • 设施建设(5 个选项中的 1 个)
      • 混凝土(20 个选项中的 1 个)
        • 预制混凝土(10 个选项中的 1 个)
          • 检索到符合条件的制造商列表

一旦所有节点都添加到数据库中,我预计它们至少在几年内不会发生变化(它们来自行业标准的主文档)。制造商列表将(希望)经常添加。

任何帮助开始正确的道路将非常感激,以及相关材料的链接。

谢谢!

0 投票
1 回答
5372 浏览

javascript - 从物化路径构建 JSON 树

我计划在 MongoDB 中使用物化路径来表示树,并且需要将物化路径转换回 JSON 树。

前任。//物化路径

结果将是:

我发现使用 JQuery 将分隔字符串转换为分层 JSON效果很好。

而且我还从物化路径中找到了构建树,它是用 Ruby 编写的并使用递归。我很感兴趣和好奇地看到它在 Javascript 中实现,并想知道是否有任何人会流利地使用 Ruby 和 Javascript 来重写它。我确实尝试了一个 Ruby 到 JS 的转换器,但结果令人费解。

谢谢,内维尔

0 投票
3 回答
479 浏览

php - 物化路径 PHP 正则表达式选择最后一项

我正在尝试从物化路径中获取项目的最后一次出现。下面是我作为示例提供的可能值的子集,其中 X、Y 和 Z 可以是任意字符串:

如何使用 php regex 选择路径上的最后一项,这将为上面的相应行输出以下内容:

0 投票
3 回答
2756 浏览

mysql - 是否可以让 MySQL 使用 1 DESC、2 ASC 的 ORDER 索引?

我有一个物化的路径驱动公告板。它使用以下查询按顺序获取消息,

whererootid线程的根消息,并且path是物化路径。

但是,我使这个查询使用索引的努力都没有成功。

目前它显示列下表中所有行的数量rows。我想知道,有没有办法减少这个数字或以其他方式优化查询?

查询的主要问题是分页 - 我需要从上一页最后一个消息旁边的消息开始第二页。这就是为什么我想要它直接的方式 - 没有 sublelects 和东西。
当前的设置虽然不是很好,因为它从线程中间开始第二页,但至少它是非常合乎逻辑的。

0 投票
1 回答
331 浏览

php - 使用正则表达式对物化路径结构化数据进行 Mysql 更新

如何在 mysql 中执行更新查询,其中匹配字符串的开头并将匹配的部分替换为另一个字符串?

我的问题的背景是我正在使用物化路径来构造我的分层数据,并且需要这种类型的查询来将一个节点及其所有子节点移动到另一个节点。

谢谢您的帮助!

0 投票
1 回答
483 浏览

android - 仅从具有具体化路径的表中选择直接后代

我正在尝试使用“物化路径”模式将目录结构存储在 Android 应用程序的 SQLite 数据库中。我的单个表有一个主键字段,即文件路径,如下所示:

我想获取 /sdcard 目录的直接子项列表。我知道如何使用以下 SQL 获取 /sdcard 的所有(间接)后代:

它返回所有行。但是获取顶级子级的 SQL 是什么,所以只返回:

这个问题的答案可能会提供洞察力,但我的 SQL 不够强大,无法理解“Scrum Meister 的回应: 基于 mysql 中的路径进行选择”

0 投票
0 回答
55 浏览

sql - 按最小后代的年龄对根元素进行排序

我有一个名为 Post 的 SQLAlchemy 模型。一个帖子可以有一个父帖子(post.id 上的外键,邻接列表模式)和子帖子(其 id 为 parent_id 的帖子)。每个帖子还包含其物化路径(post.ancestry),以便于查询后代。

我的挑战是获取根帖子(没有父母的帖子)的列表,并按照他们最小后代的年龄对它们进行排序,就像 GMail 对收件箱所做的那样。顶部的对话包含最新消息,收件箱底部的对话包含最旧的消息。

对此的查询会是什么样子?

0 投票
0 回答
254 浏览

sql-server - SQL Server:为视图中的物化路径遍历转换查询

我想在一个视图中转换这个查询,我可以调用传递 UserId 作为参数来选择与该用户相关的所有组(包括这些组的子树)。

事实上,我有 2 张桌子:

  • “EVA_Roles”包含角色树,通过 RoleHid 字段中的物化路径定义为 varchar(8000)
  • "EVA_UsersInRoles" 通过字段 UserId 将用户与角色相关联

这里的问题是只有一些角色可能与 EVA_UsersInRoles 表中的用户相关,但也许这些角色是树层次结构中其他角色的父级,因此我必须为每个用户检索多个子树。最后我想出了这个似乎工作正常的查询,但我想在视图中转换它。当然,我面临的问题是 UserId 参数(我将用于过滤视图结果的参数)位于子查询中。

任何将其重构为视图的提示?

我在应该将值传递给视图的地方留下了参数。我认为在一个视图中重构可能是不可能的。这只是以更友好的方式利用我的微 ORM(PetaPoco),否则我必须在我的代码中使用 SQL 但没关系,不要在这方面失去理智。

关于表定义:

RoleHid 中的物化路径遵循此逻辑。考虑以下数据,其中 RoleId 2 是 RoleId 1 的子项:
RoleId 1
RoleHid “1”。

RoleId 2
角色隐藏“1.2”。

通过上面的查询,我可以检索与特定用户和应用程序相关的所有子树。

0 投票
1 回答
321 浏览

tree - Riak 存储树结构

我正在为一个项目开发一个带有 riak 的分布式文件系统。我想在 riak 数据库中存储一个树结构,我想在给定路径时获取节点 ID(像 /root/dev/bin 这样的路径)

我想使用物化路径来存储树,其中通过使用节点 id 和根路径来存储树

 A
 / \
B C
/ \ \
DE F

节点 ID | 路径
A _
B A
C A
D A,B
F A,C

因此,要获取路径的 id,一种解决方案是将路径存储为键,将节点 id 存储为值,然后使用 riak 键过滤器获取路径的节点 id,另一种解决方案是将路径存储为值并使用riak 搜索以获取节点 ID。如果我使用 riak 搜索,我应该将路径存储为 json 数组还是将其存储为纯字符串?

另外我想做这样的操作,

那么您对上述解决方案有何看法,或者你们还有其他建议吗?

谢谢你

0 投票
1 回答
695 浏览

javascript - 物化路径中的对象

我正在尝试从物化类别路径数组创建类别对象数组。

如您所见,Business应该只出现一次,因为所有其他都只是子类别。但是,Leadership应该出现两次,因为两者的结构不同。

当您查看小提琴http://jsfiddle.net/9uC9Z/时,您可以看到它Business存在 4 次。

我该如何解决这个问题?

如果生成的代码非常复杂,我将非常感谢代码注释。

编辑:数组 中的物化路径字符串data反映书籍的类别层次结构。一个例子是:

那只代表一本书。我现在想为每个类别创建一个 MongoDB 文档。以上样本书将产生三个类别对象(业务、管理、领导力)。但是,如果一个类别(或子类别)对象/文档已经存在,我不需要创建另一个。 result因此代表我将存储在我的 MongoDB 集合中的类别对象。(我将添加类别之间的关系,但这不是当前问题的一部分。)