neo4j - Neo4J 是否有可能以及如何通过该值对具有匹配属性值的所有节点进行分组?
问题描述
假设我们有一个小型的面向文档的数据库(如 ElasticSearch),我们从中创建了 Neo4j 数据库内容。每个文档都是关于描述其各种属性(性别、银行、部门、年龄、职位)的用户...我想可视化 Neo4J 中的所有条目,按相同的属性值对用户进行分组(连接)。因此,所有“女性”用户以及所有“腐蚀”部门官员都将被连接。是否有可能以及如何通过这些值对具有匹配属性值的所有节点进行分组?
解决方案
要可视化所有Female
节点,只需在 neo4j 浏览器中运行:
MATCH (n:User)
WHERE n.gender = 'Female'
RETURN n;
无需将所有Female
节点冗余连接在一起。
一般来说,如果您还创建了适当的索引,这种查询会执行得更快。例如:
CREATE INDEX ON :User(gender);
[更新 1]
如果您想查看User
所有俱乐部成员的每个女性,那么您可以在s 和sMEMBER_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]
要查看每个俱乐部的所有女性成员(有任何女性成员),只需使用聚合函数 COLLECT
:
MATCH (n:User)-[:MEMBER_OF_CLUB]->(club:Club)
WHERE n.gender = 'Female'
RETURN club, COLLECT(n) AS female_members;
[更新 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;
推荐阅读
- python - 分配前引用的 /cart/slug/ 局部变量“产品”处的 UnboundLocalError
- html - 字体真棒图标加载“移位”一个角度
- javascript - 如何使用 javaScript 设置服务器端面板的数据源
- javascript - 在打字稿中完成异步函数后的事件
- android - Android Studio:R 文件未更新
- android - 由于 SecurityException: Permission Denial,无法通过 adb 或 Appium 服务器运行 Android 应用程序
- python - 如何在熊猫数据框中仅填充选定列的空值?
- javascript - 单击绝对定位的 div
- c++ - 左值到右值的转换是否发生在类类型上?
- vb.net - Linq 如何将列表项与其他列表项组合