Cypher查询与2个或更多子节点共享关系的所有节点?

时间:2016-03-29 17:23:06

标签: neo4j cypher

创建了一个GraphGist来帮助解释我的问题:

https://gist.github.com/bconneen/e5c66e26883958c81ae6fc5c607fdfa9

考虑以下Neo4J模型:

Applicant(firstName, lastName, uniqueId)
Phone(number)
IpAddress(ip)
BankAccount(routing,account)

Applicant--has->Phone,
Applicant--has->IpAddress,
Applicant--has-->BankAccount

使用merge创建所有节点。因此,如果我们处理100,000个应用程序,则会创建关系,偶尔会有超过1个申请人共享一个或多个Phone,IpAddress,BankAccount。

我希望返回的节点是2个或更多申请者共享2个或更多个电话,IpAddress或BankAccount时。我想编写一个返回所有申请人及其共享关系的查询。符合标准。

示例:

申请人(John Smith)有电话(555-555-5555),有ipAddress(127.0.0.1),有BankAccount(ABCDEF)

申请人(Jane Doe)有电话(222-222-2222,有ipAddress(127.0.0.1),有BankAccount(ABCDEF)

申请人(Steve Zahn)有电话(555-555-5555),有ipAddress(127.2.2.2),有BankAccount(GHJKD)

申请人(James Clay)有电话(444-444-4444),有ipAddress(129.3.3.3),有BankAccount(ZYXWVU)

查询共享2个或更多电话,IpAddress或银行的所有申请人

申请人(John Smith)有电话(555-555-5555),有ipAddress(127.0.0.1),有BankAccount(ABCDEF)

申请人(Jane Doe)有电话(222-222-2222,有ipAddress(127.0.0.1),有BankAccount(ABCDEF)

查询共享一个或多个电话,IpAddress或银行的所有申请人

申请人(John Smith)有电话(555-555-5555),有ipAddress(127.0.0.1),有BankAccount(ABCDEF)

申请人(Jane Doe)有电话(222-222-2222,有ipAddress(127.0.0.1),有BankAccount(ABCDEF)

申请人(Steve Zahn)有电话(555-555-5555),有ipAddress(127.2.2.2),有BankAccount(GHJKD)

1 个答案:

答案 0 :(得分:2)

使用你的要点中的数据:

查询共享2个或更多手机,ipaddress或银行的所有申请人

MATCH (applicant:Applicant)-[r]->(subelement)<-[r2]-(other:Applicant)
WITH applicant, other, collect(subelement) AS overlap 
WHERE id(applicant) > id(other) AND size(overlap) > 1
RETURN applicant, other, overlap

enter image description here