gpt4 book ai didi

neo4j - 如何使用neo4j避免重复返回不同的节点和关系

转载 作者:行者123 更新时间:2023-12-01 05:01:03 26 4
gpt4 key购买 nike

我想返回给定节点 ID 相关的节点及其关系 Prop

例如:->定义带有属性时间戳的双向关系

1234->777
777->1234
1234->999
999->1234
1234->888
888->1234

1234,777,888,999 是节点 ID

当我执行此操作时:
    final PreparedStatement ps = conn.prepareStatement("start a = node(1234) match (a)-[k:nearby*]->(b) where a<>b return DISTINCT b, k");        
ResultSet rs = ps.executeQuery();
while (rs.next()) {
Map result = (Map<String, Object>) rs.getObject("b");
System.out.println(result.toString());
}

} catch (SQLException e) {
e.printStackTrace();
logger.error("Error returning userId=" + userIdInput, e);
}
return null;

}

我得到:
{userId=777}
{userId=999}
{userId=888}
{userId=888}
{userId=999}
{userId=999}
{userId=777}
{userId=888}
{userId=888}
{userId=777}
{userId=888}
{userId=777}
{userId=999}
{userId=999}
{userId=777}
  • 我如何只获得不同的结果 (777,888,999)
  • 如何检索1234的关系props到dest节点?我希望得到 时间戳 在每个关系上定义的 prop

  • 谢谢,
    射线。

    最佳答案

    我不确定您使用的是哪种语言,因此我将重点介绍 Cypher。首先我会替换 STARTMATCH 查询与 WHEREID(a) :

    MATCH (a)-[k:nearby*]->(b)
    WHERE ID(a) = 1234 AND a<>b
    RETURN DISTINCT b, k

    其次,我很确定您不需要 a<>b因为 Cypher 路径不会在相同的节点上循环:
    MATCH (a)-[k:nearby*]->(b)
    WHERE ID(a) = 1234
    RETURN DISTINCT b, k

    最后,对于你的问题,我怀疑你得到重复的原因是因为你有多重关系。如果是这样,您可以返回结果节点和关系数组,如下所示:
    MATCH (a)-[k:nearby*]->(b)
    WHERE ID(a) = 1234
    RETURN collect(b), k

    那应该返回您的节点/关系对象(两者都有属性)。根据您的语言/库,您可能会获得 Maps 或者您可能会获得包装数据的对象

    如果您的库没有为您返回关系的开始/结束节点,您可以执行以下操作:
    MATCH (a)-[k:nearby*]->(b)
    WHERE ID(a) = 1234
    RETURN collect({rel: b, startnode: startnode(b), endnode: endnode(b)}), k

    希望这有帮助!

    关于neo4j - 如何使用neo4j避免重复返回不同的节点和关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32677104/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com