我正在尝试创建关于源自父节点的每种关系类型的深度的计数报告,但我遇到了以下错误的问题:
"Type mismatch: r already defined with conflicting type Relationship (expected Collection<Relationship>)
以下是我试图实现的输出:
[
{
reltype : "123A_RelationshipTitleOne",
depthcount : 5
}, {
reltype : "123A_RelationshipTitleTwo",
depthcount : 9
}, {
reltype : "123A_RelationshipTitleThree",
depthcount : 42
}
]
这是我的密码查询尝试,它会生成上面提到的错误。取代&#123; 123A&#39;我使用了一个变量,但我使用了&#123; 123A&#39;作为一个清晰的工作示例:
MATCH (n {id: '123A'})
OPTIONAL MATCH (n)-[r]-()
WHERE left( type(r), LENGTH( '123A' )) = '123A'
OPTIONAL MATCH p=(n)-[r*]->(c)
WITH n, COLLECT({
id : type(r),
count : MAX(length(p))
}) AS leafreport
RETURN n, leafreport
我非常感谢您提供的帮助。
答案 0 :(得分:0)
使用绑定变量type mismatch
首先表示关系,然后(在第二个r
中)表示关系集合,导致OPTIONAL MATCH
错误。
在模式(n)-[r*]->(c)
中,r*
表示可变长度路径,因此r
绑定到与可变长度模式匹配的关系集合。但是r
以前绑定到OPTIONAL MATCH (n)-[r]-()
中的关系,因此错误。如果要检查r
是否在p
路径中,请使用WHERE
子句。像这样:
MATCH (n {id: '123A'})
MATCH (n)-[r]-()
WHERE left( type(r), LENGTH( '123A' )) = '123A'
MATCH p=(n)-[rs*]->(c) WHERE r IN rs
WITH n, {
id : type(r),
count : MAX(length(p))
} AS leafreport
RETURN n, leafreport
我认为您不希望第二个OPTIONAL MATCH
是可选的,因此我将其更改为MATCH
子句