Orientdb:获取路径的所有遍历元素
Orientdb: get all traversed elements of a path
假设我有这样的查询:
select out("E1").out("E2").out("E3") from V1
其中 E1、E2、E3 是 classes 扩展 "E",V1 是 class 扩展 "V"。
我想获取在执行查询时遍历的所有元素(即不仅是最终结果)。将其视为一种对执行查询时涉及的元素的跟踪。
我尝试了以下遍历命令:
traverse in from (traverse outE("E3") from (traverse in from (traverse outE("E2") from (traverse in from (traverse outE("E1") from V1)))))
这与我需要的很接近,但并不相同。这个命令的问题是,如果 "V1" 初始集合的某些顶点包含 class "E2" 或 "E3" 的边,那么它们也会被遍历,即使我不希望它们被遍历(因为 select 查询将遍历仅通过遍历 "E1" 边返回的顶点的 "E2" 边)
也就是说,我想让 TRAVERSE 命令只遍历上一步的结果,而不是到那一步的所有结果
有办法实现吗?
您应该改用 MATCH:
MATCH
{class:V1, as:a} -E1-> {as:b} -E2-> {as:c} -E3-> {as:d}
RETURN $patterns
这将 return 所有匹配该模式的 RID,例如
| a | b | c | d |
| #12:0 | #12:1 | #12:2 | #12:4 |
| #12:3 | #12:5 | #12:7 | #12:8 |
如果需要扩展,只需将 return $patterns
替换为 return $elements
,例如
MATCH
{class:V1, as:a} -E1-> {as:b} -E2-> {as:c} -E3-> {as:d}
RETURN $elements
假设我有这样的查询:
select out("E1").out("E2").out("E3") from V1
其中 E1、E2、E3 是 classes 扩展 "E",V1 是 class 扩展 "V"。
我想获取在执行查询时遍历的所有元素(即不仅是最终结果)。将其视为一种对执行查询时涉及的元素的跟踪。
我尝试了以下遍历命令:
traverse in from (traverse outE("E3") from (traverse in from (traverse outE("E2") from (traverse in from (traverse outE("E1") from V1)))))
这与我需要的很接近,但并不相同。这个命令的问题是,如果 "V1" 初始集合的某些顶点包含 class "E2" 或 "E3" 的边,那么它们也会被遍历,即使我不希望它们被遍历(因为 select 查询将遍历仅通过遍历 "E1" 边返回的顶点的 "E2" 边) 也就是说,我想让 TRAVERSE 命令只遍历上一步的结果,而不是到那一步的所有结果
有办法实现吗?
您应该改用 MATCH:
MATCH
{class:V1, as:a} -E1-> {as:b} -E2-> {as:c} -E3-> {as:d}
RETURN $patterns
这将 return 所有匹配该模式的 RID,例如
| a | b | c | d |
| #12:0 | #12:1 | #12:2 | #12:4 |
| #12:3 | #12:5 | #12:7 | #12:8 |
如果需要扩展,只需将 return $patterns
替换为 return $elements
,例如
MATCH
{class:V1, as:a} -E1-> {as:b} -E2-> {as:c} -E3-> {as:d}
RETURN $elements