arangodb - ArangoDB:相关文档的遍历条件
问题描述
被这个问题困扰了好几天,试图做到这一点:请参阅提供的图片。黑色是起始顶点。试图得到:
1:所有子部件 OUTBOUND(从)起始顶点
2:条件:孩子必须有 INBOUND 边缘“类型”和另一端的文档,其变量设置为“true”并且类型为“type”。
3:当“part”类型的文档无法满足“type”类型且属性为“true”的INBOUND文档的要求时,它会立即停止该路径的扩展。
4:失败的文档也不包含在结果中。
5:应该与任何深度兼容。
6:没有子查询(如果可能没有)。
解决方案
根据给定的信息,数据模型似乎有问题。为什么每个partScrew 都有true
一个和false
顶点而不是布尔边缘属性?像这样建模有什么原因吗?
使用这个数据模型,我看不出没有子查询怎么可能。可以使用 提前停止沿路径的遍历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
推荐阅读
- sqlbuilder - 如何使用 Sql Builder 中的 cast() 函数
- visual-studio - 如何使用 Wix 工具集的 HarvestDirectory?
- r - 在多元线性回归中更改图例和更改线型
- node.js - 将图像直接推送到 Heroku
- python - 将括号内的文本从数据框中的一列解析到另一列
- cypress - 等待 Cypress 未覆盖的元素
- javascript - 仅返回布尔值的函数的 Jest 测试
- sql - 将 SQL 查询转换为 Pig 查询
- c++ - C++ 函数以退出代码退出循环无
- android - 如何以及需要做什么才能在 android 上使用 CAN?