【问题标题】:Neo4j - Using Cypher start at a node and Traverse graph to a specified depth and find nodes and relationshipsNeo4j - 使用 Cypher 从节点开始并遍历图到指定深度并查找节点和关系
【发布时间】:2014-09-29 18:03:58
【问题描述】:

我有一个简单的图表,我试图从一个特定节点开始并遍历深度 2。我试图从这个遍历中提取节点和关系的名称。

这是我的查询,

    START n=node(5)
    MATCH p=(n)-[r:Relation*0..2]-(m)
    RETURN n.name,r.name,m.name;

我收到此错误:

    Type mismatch: expected Map, Node or Relationship but was Collection<Relationship> (line 3, column 15)

在错误描述中,它指向一个 ^ 符号到 r.name

谁能帮我理解这个问题。我的目标是一路获取关系的名称..

据我了解, r 作为集合返回。有没有办法在集合中显示个人姓名?

【问题讨论】:

    标签: rest graph neo4j cypher


    【解决方案1】:

    假的,

    正如您所指出的,问题在于“r”是可能具有 0、1 或 2 个元素的关系的集合。您可以使用 reduce 函数创建关系名称字符串并返回该字符串。

    START n=node(5)
    MATCH (n)-[r:Relation*0..2]-(m)
    WITH n, m, reduce(s = '', rel IN r | s + rel.name + ',') as rels
    RETURN n.name, m.name, rels;
    

    恩典与和平,

    吉姆

    【讨论】:

    • 谢谢,吉姆。我花了几天时间尝试 FOREACH,终于意识到是时候向专家寻求帮助了。抱歉,因为我的代表点是初学者,所以我不能投票给你。
    • 让恩典与和平盛行:)
    • @JimBiard 我不明白这一点。您能否详细说明一下。我也遇到了同样的错误,我的查询是这样的。 MATCH (ev1:EV{ev_id:221})-[r1:cousin*]->(vals1:EV) 与 vals1,r1 匹配(vals1)(p:Product) where r2.filter='f1' and r2.category_id in[70,0] return distinct vals1.ev_id as id, vals1 .group_id 作为 group_id; :: 我正在做的是我想要这些 ev_ids 的所有表亲关系,当我为该 reln 应用过滤器时,它会抛出错误。
    • @JugalSingh - 您的查询似乎存在许多问题。如果不了解更多关于您的图表的外观,就很难知道如何做出回应。直接的答案是关系集合的行为与单个关系匹配不同。这就是为什么你不能那样做 WHERE 子句的原因。我认为您的第二个和第三个 MATCH 子句无法实现您的意图。 WHERE 子句元素可能应该在您的第二个 MATCH 子句中。
    • @JimBiard 什么是 nodeID 不是一个整数来做节点 (5) 如果它是一个字符串它会给出错误
    猜你喜欢
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    相关资源
    最近更新 更多