代码之家  ›  专栏  ›  技术社区  ›  Dr. Strangelove

从Neo4j图中获取给定跃点处的节点和关系

  •  0
  • Dr. Strangelove  · 技术社区  · 4 年前

    apoc.neighbors.byhop ,但不确定如何获取节点之间的关系。

    A 连接到 C 通过 B1 B2 .输出 apoc.neights.byhop

    enter image description here

    merge (p1:Person {label:"A"})
    merge (p2:Person {label:"B1"})
    merge (p3:Person {label:"B2"})
    merge (p4:Person {label:"C"})
    merge (p1)-[:Knows]->(p2)
    merge (p1)-[:Knows]->(p3)
    merge (p2)-[:Knows]->(p4)
    

    要以n跳距离检索节点,请执行以下操作:

    match (p:Person {label:"A"})
    call apoc.neighbors.byhop(p, "Knows", 3) 
    yield nodes 
    return nodes
    

    返回不包含关系信息的如下对象。

    [
       [
          {
             "identity":11,
             "labels":[
                "Person"
             ],
             "properties":{
                "label":"B1"
             }
          },
          {
             "identity":12,
             "labels":[
                "Person"
             ],
             "properties":{
                "label":"B2"
             }
          }
       ],
       [
          {
             "identity":0,
             "labels":[
                "Person"
             ],
             "properties":{
                "label":"C"
             }
          }
       ]
    ]
    

    0 回复  |  直到 4 年前
        1
  •  0
  •   jose_bacoy    4 年前

    MATCH path=(p:Person {label:"A"})-[:Knows*1..]->(p2:Person)
    WITH [n in nodes(path) where n <> p | n] as nodes, relationships(path) as relationships 
    WITH size(nodes) as cnt, collect(nodes[-1]) as nodes, collect(distinct relationships[-1]) as relationships 
    RETURN nodes, relationships
    

    [
      {
        "nodes": [
          {
            "identity": 2,
            "labels": [
              "Person"
            ],
            "properties": {
    "label": "B1"
            }
          },
          {
            "identity": 3,
            "labels": [
              "Person"
            ],
            "properties": {
    "label": "B2"
            }
          }
        ],
        "relationships": [
          {
            "identity": 0,
            "start": 1,
            "end": 2,
            "type": "Knows",
            "properties": {
    
            }
          },
          {
            "identity": 1,
            "start": 1,
            "end": 3,
            "type": "Knows",
            "properties": {
    
            }
          }
        ]
      },
      {
        "nodes": [
          {
            "identity": 4,
            "labels": [
              "Person"
            ],
            "properties": {
    "label": "C"
            }
          }
        ],
        "relationships": [
          {
            "identity": 2,
            "start": 2,
            "end": 4,
            "type": "Knows",
            "properties": {
    
            }
          }
        ]
      }
    ]
    
        2
  •  0
  •   propayne7    4 年前

    在纯Cypher中类似这样的内容将显示节点之间的所有关系。您可以根据需要调整节点属性和关系名称。

    MATCH path = (p:Person)-[*1..]->(p2:Person) RETURN p, relationships(path), p2