假设我们有一个小型的面向文档的数据库(例如ElasticSearch),我们从中创建了Neo4j数据库内容。每个文档都是关于描述其各种属性(性别,银行,部门,年龄,职位)的用户的...我想可视化Neo4J中的所有条目,通过相同的属性值对用户进行分组(连接)。因此,所有“女性”用户以及所有“腐蚀”部门官员都将被连接。是否可以以及如何将所有具有匹配属性值的节点按这些值分组?
答案 0 :(得分:1)
要可视化所有Female
节点,只需在neo4j浏览器中运行它即可:
MATCH (n:User)
WHERE n.gender = 'Female'
RETURN n;
无需将所有Female
节点冗余连接在一起。
通常,如果您还创建了适当的index,则这种查询的执行速度会更快。例如:
CREATE INDEX ON :User(gender);
[更新1]
如果您要查看所有俱乐部成员中的每个女性User
,则可以在MEMBER_OF_CLUB
和User
之间建立Club
关系,并修改进行相应查询:
MATCH (c:Club)
WITH COUNT(c) AS clubCount
MATCH (n:User)
WHERE n.gender = 'Female' AND SIZE((n)-[:MEMBER_OF_CLUB]->()) = clubCount
RETURN n;
此查询使用有效的度运算来检查User
所属的俱乐部数目等于俱乐部总数。
[更新2]
要查看每个俱乐部的所有女性成员(有任何女性成员),只需使用aggregating function COLLECT
:
MATCH (n:User)-[:MEMBER_OF_CLUB]->(club:Club)
WHERE n.gender = 'Female'
RETURN club, COLLECT(n) AS female_members;
[UPDATE 3]
如果您真的希望每个User
节点保留俱乐部名称列表(而不是拥有Club
节点和MEMBER_OF_CLUB
关系),那么应该可以:
MATCH (n:User)
WHERE n.gender = 'Female'
UNWIND n.clubs AS club
RETURN club, COLLECT(n) AS female_members;