ArangoDB - 如何查找与特定节点无关的节点?
ArangoDB - How to find nodes not related to a specific one?
为清楚起见,步骤名称用作标识符
我有以下有向无环图 (DAG):
我想做的是 select 一个节点,然后找到所有其他未 直接 连接到 selected 的节点一个,仅在 出站 方向。
例如:如果我 select "root step",我的查询应该只有 return "test step 3",因为它是唯一没有直接连接到 "root step" ].
但是,如果我select"test step 2",应该只return"test step 3",而不是 "test step",因为“测试步骤* 与 "test step 2" 处于同一级别。
现在,我是这样做的:
我在每个 "step" 中存储它作为数组的 parents 列表。 (测试步骤有["root step"],等等)
我的查询如下(以测试步骤2为例):
FOR v, e IN 0..10 OUTBOUND "steps/test step 2" steps_relations
FILTER e._from != "steps/test step 2"
FILTER e._to != "steps/test step 2"
FILTER v._id != "steps/test step 2"
FILTER ["root step"] NONE IN v.parents
RETURN {id: v._key, name: v.name }
现在 return 是一个空结果,而不是预期的结果 ("test step 3")。非常感谢任何帮助
我终于设法解决了这个问题。这是我的做法:
首先,我在每个 "steps" 文档中添加了两个字段:
root:当它是树的根时等于true
(如"root step")。否则它只是引用根步骤的内部 ID
深度:对于根步骤等于 0,但会递增。当我将一个步骤添加到另一个步骤时,只有当结果大于实际存储的结果时,新步骤的深度才等于 (parent + 1)。
有了这个之后,我的查询如下所示:
情况:我想列出所有可以链接的步骤"test step 2"
FOR step, relation IN 0..10 ANY "steps/root step" steps_relations
FILTER step.depth > 1 /* THE DEPTH OF test step 2 WICH IS 1 */
FILTER relation._from != "steps/test step 2"
RETURN item
这returns成功"test step 3"
您应该使用 the min attribute 来抑制直接连接的边:
FOR v, e IN 2..10 OUTBOUND "steps/test step 2" steps_relations
RETURN {id: v._key, name: v.name }
这样你只会得到长于一个边跳的路径,以及从 2 开始的顶点。
为清楚起见,步骤名称用作标识符
我有以下有向无环图 (DAG):
我想做的是 select 一个节点,然后找到所有其他未 直接 连接到 selected 的节点一个,仅在 出站 方向。
例如:如果我 select "root step",我的查询应该只有 return "test step 3",因为它是唯一没有直接连接到 "root step" ].
但是,如果我select"test step 2",应该只return"test step 3",而不是 "test step",因为“测试步骤* 与 "test step 2" 处于同一级别。
现在,我是这样做的:
我在每个 "step" 中存储它作为数组的 parents 列表。 (测试步骤有["root step"],等等)
我的查询如下(以测试步骤2为例):
FOR v, e IN 0..10 OUTBOUND "steps/test step 2" steps_relations
FILTER e._from != "steps/test step 2"
FILTER e._to != "steps/test step 2"
FILTER v._id != "steps/test step 2"
FILTER ["root step"] NONE IN v.parents
RETURN {id: v._key, name: v.name }
现在 return 是一个空结果,而不是预期的结果 ("test step 3")。非常感谢任何帮助
我终于设法解决了这个问题。这是我的做法:
首先,我在每个 "steps" 文档中添加了两个字段:
root:当它是树的根时等于
true
(如"root step")。否则它只是引用根步骤的内部 ID深度:对于根步骤等于 0,但会递增。当我将一个步骤添加到另一个步骤时,只有当结果大于实际存储的结果时,新步骤的深度才等于 (parent + 1)。
有了这个之后,我的查询如下所示:
情况:我想列出所有可以链接的步骤"test step 2"
FOR step, relation IN 0..10 ANY "steps/root step" steps_relations
FILTER step.depth > 1 /* THE DEPTH OF test step 2 WICH IS 1 */
FILTER relation._from != "steps/test step 2"
RETURN item
这returns成功"test step 3"
您应该使用 the min attribute 来抑制直接连接的边:
FOR v, e IN 2..10 OUTBOUND "steps/test step 2" steps_relations
RETURN {id: v._key, name: v.name }
这样你只会得到长于一个边跳的路径,以及从 2 开始的顶点。