Neo4J:查询返回按关系属性分组的节点?

时间:2014-04-21 20:51:06

标签: group-by neo4j relation

在我的例子中,节点与一个或多个类型为similar的关系相关联。此关系有两个属性fldNamevalue。例如:

(x)-[r:similar {fldName:'e-mail', value: 'name@x.y.com' }]->(y)
(x)-[r:similar {fldName:'phone', value: '123-45-67' }]->(y)
(q)-[r:similar {fldName:'e-mail', value: 'other@x.y.com' }]->(p)
(q)-[r:similar {fldName:'phone', value: '891-23-45' }]->(p)
(s)-[r:similar {fldName:'e-mail', value: 'neo@x.y.com' }]->(t)

问题:

1)返回以下单独的组结果的查询是什么:

group 1: x,y; number of relations: 2
group 2: q,p; number of relations: 2
group 3: s,t; number of relations: 1

2)是否可以在没有先验知识的情况下编写此查询关系属性的值?

1 个答案:

答案 0 :(得分:0)

对于您想要实现的目标,我建议您使用标签。您可以按如下方式填充数据库:

merge (:x)-[:similar {fldName:'e-mail', value: 'name@x.y.com' }]->(:y)
merge (:x)-[:similar {fldName:'phone', value: '123-45-67' }]->(:y)
merge (:q)-[:similar {fldName:'e-mail', value: 'other@x.y.com' }]->(:p)
merge (:q)-[:similar {fldName:'phone', value: '891-23-45' }]->(:p)
merge (:s)-[:similar {fldName:'e-mail', value: 'neo@x.y.com' }]->(:t)

在这里,您将使用标签x,y,q,p,s和t创建节点。

您可以使用以下查询对结果进行分组:

MATCH (x)-[r:similar]->(y)
RETURN labels(x), labels(y), count(r) as relCount

请参阅Neo4j console了解结果。