我想写一个密码查询,给定一个节点X,它给出该给定节点的所有父节点,直到我找到具有类型属性为ROOT的根节点。
作为一个例子,我附上了下面的图像,其中我的RootNode是主要的父节点,它具有属性 {type:“ROOT”}。
示例1:查找标签为 * TYPE 2:X3的节点的所有父节点 * 从图中我们可以看到,TYPE 2:X3有一个父节点TYPE 2:X1。现在TYPE 2:X1有两个父节点TYPE 1:T1和RootNode。递归地查找TYPE 1:T1的父节点,即RootNode。因此,答案将是类型1:T1和类型2:X1
示例2:查找标签为 * TYPE 2:X4的节点的所有父节点 * 从图中我们可以看到,TYPE 2:X4有4个父节点TYPE 1:T1,TYPE 2:X1,TYPE 2:X2,TYPE 1:T2这些节点都有父节点作为RootNode,因此答案将是这4个节点。
请注意,我的图可以有多达10级的父节点这样。
2条答案
按热度按时间tjjdgumg1#
[更新]
此查询将通过遵循从给定
n
节点开始的所有出站关系返回所有不同的ancestor
节点,不包括任何没有出站关系的节点。这个查询还对可变长度模式设置了一个上限,以避免永远占用内存或耗尽内存。
x[1..-1]
语法指定了x
的子列表,该子列表由其第二个元素直到并包括其倒数第二个元素组成。* (文档有点误导,因为它集中在range()
函数上,而指定子列表根本不依赖于使用range()
函数。这两个概念本应单独讨论。)*o8x7eapl2#
最简单的方法就是遍历路径长度可变的图:
可变的路径长度可能会使查询爆炸,特别是如果您有超级节点。如果你有一个相当平衡的树结构,就像你的图表,这可能是可以的。
UPDATE:这将使您不需要知道根节点上的标签: