Neo4J是否可能,以及如何根据该值将具有匹配属性值的所有节点分组?
假设我们有一个面向文档的小型数据库(如ElasticSearch),我们从中创建了Neo4j数据库内容。每个文档都是关于一个用户的,描述了它的各种属性(性别、银行、部门、年龄、职位)。。。我想可视化Neo4J中的所有条目,通过相同的属性值对用户进行分组(连接)。因此,将连接所有“女性”用户以及所有“腐蚀”部门官员。是否可能以及如何将所有具有匹配属性值的节点按这些值分组?要可视化所有Neo4J是否可能,以及如何根据该值将具有匹配属性值的所有节点分组?,neo4j,cypher,Neo4j,Cypher,假设我们有一个面向文档的小型数据库(如ElasticSearch),我们从中创建了Neo4j数据库内容。每个文档都是关于一个用户的,描述了它的各种属性(性别、银行、部门、年龄、职位)。。。我想可视化Neo4J中的所有条目,通过相同的属性值对用户进行分组(连接)。因此,将连接所有“女性”用户以及所有“腐蚀”部门官员。是否可能以及如何将所有具有匹配属性值的节点按这些值分组?要可视化所有女性节点,只需在neo4j浏览器中运行以下命令: MATCH (n:User) WHERE n.gender = '
女性节点,只需在neo4j浏览器中运行以下命令:
MATCH (n:User)
WHERE n.gender = 'Female'
RETURN n;
无需冗余地将所有阴节点连接在一起
通常,如果您还创建了适当的。例如:
CREATE INDEX ON :User(gender);
[更新1]
如果您想查看所有俱乐部的每位女性用户
,则可以在用户
s和俱乐部
s之间建立俱乐部成员
关系,并相应修改查询:
MATCH (c:Club)
WITH COUNT(c) AS clubCount
MATCH (n:User)
WHERE n.gender = 'Female' AND SIZE((n)-[:MEMBER_OF_CLUB]->()) = clubCount
RETURN n;
此查询使用有效的递减操作来检查用户所属的俱乐部数是否等于俱乐部总数
[更新2]
要查看每个俱乐部(有任何女性会员)的所有女性会员,只需使用收集
:
MATCH (n:User)-[:MEMBER_OF_CLUB]->(club:Club)
WHERE n.gender = 'Female'
RETURN club, COLLECT(n) AS female_members;
[更新3]
如果您确实希望每个用户
节点保留一个俱乐部名称列表(而不是俱乐部
节点和俱乐部成员
关系),这应该可以:
MATCH (n:User)
WHERE n.gender = 'Female'
UNWIND n.clubs AS club
RETURN club, COLLECT(n) AS female_members;
我不太清楚你在找什么,但你是说像是有一个用户
节点,与女性节点有性别关系吗。。。等等?@rickg12hs:不,我想对用户属性执行一种映射/缩减过程(连接/分组所有女性、男性等),您可以通过collect()
您的:用户节点的性别
属性(或您感兴趣的任何属性)。你是在问如何在Cypher里做到这一点,或者这是一个关于如何可视化图形结果的问题?如何在Cypher中实现并将结果可视化为图形?如果我想看到所有女性以及n.club=='X'
的所有成员都连接在一起,该怎么办?对于我系统中所有不同的X
,我想按特定的俱乐部对不同的女性进行分组并显示如果Club
不是一个特殊的对象,但仅仅是一个User
属性,那么它会起作用吗?如果你的意思是“如果没有Club的成员关系或Club
节点,但是User
节点只有一个包含俱乐部名称列表的属性”,那么这也可以起作用,但密码将更加复杂,执行速度可能会较慢。我建议的方法符合标准实践。是的,正是这样。你能为这种情况提供一个代码示例吗?