使用 neo4j and/or python 在节点的路径(深度)中查找步骤

Find steps in path (depth) for a node using neo4j and/or python

我有下图

这些关系中的每一个都是“USES_COMPONENT

在对 neo4j 密码结果进行规范化后,我的结构类似于

{
    '1': {
        'label': 'Product', 
        'properties': {...}, 
        'type': 'VERTEX'
    },
    '2': {
        'label': 'Component', 
        'properties': {...}, 
        'type': 'VERTEX'
    }, 
    '3': {
        'label': 'USES_COMPONENT', 
        'properties': {...}, 
        'type': 'EDGE', 
        'direction': 'OUT', 
        'from': '1', 
        'to': '2'
    }
}

最终描述了整个图(与原始密码响应非常相似)

我当前的密码查询是:(Froot Loops的uuid是a1。我分配了这个。)

MATCH p = (pr:Product)-[:USES_COMPONENT*]->()
WHERE pr.meta_uuid = 'a1'
RETURN p

我需要做的是找出每个组件离根(Froot Loops)有多少步

因此 Corn Flour Blend1 步远,而 Whole Grain Yellow Corn Flour2 步远。

我对密码实现或 python 实现都很满意。或者,两者结合。

一些注意事项:

  1. 我完全控制图形数据及其标准化方式(上图)。我想让它尽可能接近这个,但我可以调整它
  2. 性能很重要,但是 none 这些图表会大得离谱。如果(总计)任何产品有超过 200 个组件(在任何深度),我会感到惊讶
  3. 我很乐意包括第三方库,如果有人知道的话
  4. 我只担心USES_COMPONENT关系,那永远不会循环。无论您沿着 USES_COMPONENT 路径 走多远,它永远不会遇到 Froot Loops。

感谢大家的帮助。我什至不完全确定 google 是什么,所以如果我遗漏了一些明显的东西,link 将不胜感激。

因为如您在 中所述,距根节点距离足够的节点,此查询应该有效:

MATCH p = (pr:Product)-[r:USES_COMPONENT*]->(n)
WHERE pr.meta_uuid = 'a1'
RETURN n, size(r)

此查询使用 size() 函数获取 pr(根)和每个 n 节点之间的 r 关系的数量。