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