繁体   English   中英

ArangoDB:相关文档的遍历条件

[英]ArangoDB: Traversal condition on related document

被这个问题困扰了好几天,试图做到这一点:请参阅提供的图片。 黑色是起始顶点。 试图得到:

1:所有子部件 OUTBOUND(从)起始顶点

2:条件:孩子必须有 INBOUND 边缘“类型”和另一端的文档,其变量设置为“true”并且类型为“type”。

3:当“part”类型的文档无法满足“type”类型且属性为“true”的INBOUND文档的要求时,它会立即停止该路径的扩展。

4:失败的文档也不包含在结果中。

5:应该与任何深度兼容。

6:没有子查询(如果可能没有)。

图表示例

根据给定的信息,数据 model 似乎有问题。 为什么每个partScrew都有true顶点而不是false边缘属性? 像这样建模有什么原因吗?

使用这个数据 model,我不明白如果没有子查询这怎么可能。 可以使用PRUNE提前停止沿路径的遍历,但这不支持子查询。 这只留下FILTER用于后过滤作为选项,但请注意,您需要检查路径上的所有顶点,而不仅仅是发射的顶点是否具有入站false类型。

不确定它是否在所有情况下都按预期工作,但这是我想出的和查询结果,这对我来说看起来不错:

LET startScrew = FIRST(FOR doc IN screw LIMIT 1 RETURN doc) // Screw A
FOR v,e,p IN 1..2 OUTBOUND startScrew partScrew
  FILTER (
    FOR v_id IN SHIFT(p.vertices[*]._id) // ignore start vertex
      FOR v2 IN 1..1 INBOUND v_id types
      RETURN v2.value
  ) NONE == false
  RETURN {
    path: CONCAT_SEPARATOR(" -- ", p.vertices[*].value)
  }

注释图

小路
螺丝 A -- D 部分
螺丝 A -- E 部分
螺丝 A -- E 部分 -- F 部分

转储测试数据: https://gist.github.com/Simran-B/6bd9b154d1d1e2e74638caceff42c44f

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM