繁体   English   中英

Neo4j 1对1关系

[英]Neo4j 1 to 1 Relationship

我有两个节点,“客户端”和“构建器”。 我只想查找客户端只有1个构建器的关系,而该构建器只有一个客户端,所以是1-1关系。 到目前为止,我的查询是

MERGE(b:Person{name:csv.name) 
MERGE(c:Person{name:csv.name})
WITH collect(distinct b) as builder, collect(distinct c) as client
UNWIND builder as builders
UNWIND client as clients
WITH builders, clients
WHERE builders = 1 and clients = 1
MATCH (builders:Person)-[bu:builder_for]->(clients:Person)
WITH builders,clients, count(distinct bu) as builds
WHERE builds=1

RETURN distinct builders, clients

这只会返回一对多关系,并且在我的客户列表中仍显示重复项。

突出显示的是我想返回的

UPDATE Cyber​​sam实施成功了,非常感谢!

假设您要获取所有仅具有一个builder_for关系的builder / client对,此查询将使用聚合函数 COUNT来做到这一点:

MATCH (builder:Person)-[rel:builder_for]->(client:Person)
WITH builder, client, COUNT(rel) AS rel_count
WHERE rel_count = 1
RETURN builder, client;

[UPDATE]

相反,如果您想要builder / client对,其中builder只有一个client ,反之亦然,则此查询应该起作用:

MATCH (builder:Person)
WHERE SIZE((builder)-[:builder_for]->()) = 1
MATCH (builder)-[:builder_for]->(client:Person)
WHERE SIZE(()-[:builder_for]->(client)) = 1
RETURN builder, client;

该查询使用有效的关系度检查(在WHERE子句中),以确保builder节点和client节点分别仅具有单个传出或传入的builder_for关系。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM