问题标签 [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 回答
797 浏览

python - 声明性 SQLAlchemy 中的物化路径关系

我有一个分层类别模型,其中使用物化路径(每级一个字符)维护层次结构:

在尝试定义“所有子类别”关系时,我遇到了一个问题:

SQLAlchemy 很困惑,因为我正在加入同一列。我设法找到的所有示例总是加入不同的列。

这种关系有可能吗?我想通过这个连接查询,所以自定义@property 是不可接受的。

0 投票
0 回答
827 浏览

mongodb - 使用物化路径模式存储 MongoDB 树

我需要模仿 mongodb 中的目录结构。我已阅读有关物化路径模式的信息,这是我需要使用的

http://docs.mongodb.org/manual/tutorial/model-tree-structures/ Materialized Paths 模式将每个树节点存储在一个文档中;除了树节点之外,文档将节点的祖先或路径的 id 存储为字符串。

这样做的问题是 _id 需要是唯一的,但在我的情况下,目录名称应该支持重复(您可以有 2 个或多个同名目录)。

有任何想法吗?谢谢。

0 投票
0 回答
1322 浏览

mongodb - 支持 MongoDB 中重复路径 ID 的物化路径树结构?

在 mongodb 文档的物化路径树结构指南中,他们展示了一个简单示例,说明如何构建数据以支持简单查询:

只要_id每个项目都是唯一的,这就可以正常工作。在我们的例子中,我们正在设计一个课程结构,它必须支持 SEO:able URL,例如/course-a/lesson-1/introduction. 数据设计必须支持重复(例如,多个课程可以有一个名为“介绍”的课程):

  • 课程A
    • 简介(课)
      • 第 1 部分(课程)
      • 第 2 部分(课程)
    • 背景(课)
    • ...(课程)
  • 课程 B
    • 简介(课)
    • 为什么这样有效(课程)
    • ...(课程)

我们当前的解决方案是使用物化路径设计创建课程。这时我们意识到它不适用于重复的课程 ID。但在把它全部扔掉之前,我想征求你的意见。

有没有办法设计这个来支持我们使用物化路径的问题?

0 投票
1 回答
2073 浏览

postgresql - PostgreSQL ltree- vs 树模块 vs 整数/字符串数组或字符串分隔路径

您可能知道 PostgreSQL 有一个名为 ltree 的模块。此外,您还可以将 Array 类型用于整数(*1,请参见下面的评论),在此测试中,与 ltree 相比,它的递归查询实际上执行得稍慢 - 除了字符串索引(*2,请参阅下面的评论)。

不过,我不太确定这些测试结果的可信度。

我最大的问题实际上是关于相对未知且几乎没有文档的树模块。此处描述(也可以在其中找到文档!!)为:

对分层数据类型(某种词典树)的支持,应该转到 contrib/tree,由于缺乏适当的 文档而待定。

阅读完文档后,我有点困惑是否应该建立我的大型应用程序(一个 CMS,所有内容都将存储在分层树结构中 - 不仅是内容,还有文件等,所以你可以看到这会迅速扩大)围绕 ltree,普通的物化路径(路径枚举),以分隔的字符串或整数数组作为路径 - 或者如果理论上相对未知的“树”模块应该是两者的更快执行、更可扩展和更好的解决方案.

我已经分析了不同的树结构模型,并且由于节点和子树的查询性能、可伸缩性和重新排序是我的主要要求,我已经能够排除邻接列表(递归 CTE 无法解决性能问题,因为树的规模很大),嵌套集/间隔(在某些查询中速度不够快,考虑到它在操作树时的缺点),闭包表(在复杂树中非常大 - 对我这样的大型项目没有用处)等并决定使用物化路径,对于读取操作来说非常快,并且可以轻松地在层次结构中移动子树和节点。所以问题只是关于物化路径的最佳建议实现。

我特别好奇听到您在 PostgreSQL 中使用“树”的理论或经验。

0 投票
2 回答
355 浏览

sql - 使用书架的 Postgres 物化路径搜索

假设我正在使用物化路径来存储管理链:

我如何构造一个查询给定一个返回他所有直接报告的用户 id,例如给定中间经理,它应该返回 Cubicle Slave 和 Janitor,给定高级副总裁它应该返回中间经理。换句话说,management_chain在倒数第二个位置获取包含查询的 id 的所有记录的好方法是什么(假设最后一项表示用户自己的 id)。

换句话说,我如何表示以下 SQL:

我现在的 JS:

哪个错误

ReferenceError: id is not defined

0 投票
2 回答
3942 浏览

json - PostgreSQL 物化路径/Ltree 到分层 JSON 对象

我有这个使用 PostgreSQL 的 ltree 模块构建的物化路径树结构。

  • id1
  • id1.id2
  • id1.id2.id3
  • id1.id2.id5
  • id1.id2.id3.id4 ...等

我当然可以轻松地使用 ltree 从整个树或特定路径/子路径中获取所有节点,但是当我这样做时,自然得到的是很多行(这等于结束.. Golang/您使用的任何编程语言)

我所追求的是获取树 - 理想情况下从某个开始和结束路径/点 - 作为分层 JSON 树对象等

我从线性(非分层)行/数组/切片结果集中知道,我当然可以在 Golang 中爆炸路径并在那里创建必要的业务逻辑来创建这个 json,但是如果有一个方便的,它肯定会好得多直接用 PostgreSQL 实现这一点的方法。

那么,您将如何在 PostgreSQL 中将 ltree 树结构输出到 json - 可能是从开始到结束的路径?

如果你不知道 ltree,我想这个问题可以更概括为“Materalized path tree to hierachical json”

此外,我正在考虑在除了 ltree 路径之外的所有节点上添加 parent_id 的想法,因为至少那时我将能够使用递归调用使用该 id 来获取我猜想的 json ......我也有考虑过在该 parent_id 上放置一个触发器,以根据父 ID 发生更改的时间来管理路径(保持更新) - 我知道这是另一个问题,但也许你也可以告诉我你的意见,关于这个?

我希望一些天才可以帮助我解决这个问题。:)

为了您的方便,这里有一个示例创建脚本,您可以使用它来节省时间:

0 投票
1 回答
654 浏览

php - 使用物化路径将平面数组转换为嵌套数组

我有一些类别需要转换为嵌套数组(树)。我使用物化路径来制作一棵树,我在 PHP 中工作。这是我所拥有的 print_r:

我试图做到这一点,但我迷失了递归函数的整个想法。

更新 :

这是我最终想要的:

我想向您展示我已经编码的内容,但它离工作还很远,所以在我看来没什么好看的。

0 投票
3 回答
688 浏览

mysql - 按日期+路径的具体化路径排序顺序

我有带有注释的数据库(物化路径)(mysql)。如果我使用“select * from comm where post_id=10 order by path ASC ”选择所有 comm,结果我有来自按路径排序的帖子的评论,旧日期在顶部,新日期在底部。

那么,有没有办法在 disqus 中使用 like 在顶部选择更新?如果我只是“按路径 DESC 排序” - 分支会倒置显示 - 这不是我想要的。所以我需要按日期(顶部的新通讯)和路径排序。谢谢。!

链接到更大的图片https://drive.google.com/file/d/0BwIgYhO9h960ZTl4a24wNXFFQnM/view?usp=sharing

更大的图片

0 投票
4 回答
998 浏览

sql - 搜索物化路径树的最右边节点

是否可以通过物化路径树的path文本字段进行排序以找到树的最右侧节点?例如,考虑这个使用 django-treebeard 的 python 函数MP_Node

从我所有的测试来看,它似乎返回了我的期望,但我不知道如何提出数学来证明它。而且我还没有找到有关在物化路径树上执行此操作的任何信息。

Treebeard 的实现在路径中没有分隔符,因此路径如下所示:000100010001000100010012等。

0 投票
3 回答
541 浏览

php - 如何使用存储过程在mysql中创建树视图

我很困惑。我不知道如何使用存储过程在 MySQL 中创建树视图。我尝试在 Google 中搜索,但我不明白如何查询。

我有

我想让它像这样