可选节点聚合
回答
鉴于你的示例图,在Neo4j的,你可以使用下面的Cypher查询捕获直接(User)-->(Comment)
关系,并采用间接(User)-->(Comment)-->(Comment)
variable length path operator:
MATCH (u:User)-[*]->(:Comment)
RETURN u, COUNT(*) AS num
编辑
布鲁诺指出该查询哟返回3因为它考虑了用户分组的所有路径。取而代之的是,你在连接到每个用户不同 Comment节点数量可能感兴趣的:
MATCH (u:User)-[*]->(c:Comment) RETURN u, COUNT(DISTINCT c) AS num
该查询返回3,因为它会考虑与图中用户有关的任何评论。返回2时,你需要指定'MATCH(u:User) - [*] - >(:Comment {text:'comment'})应该考虑什么评论“ RETURN u,COUNT(*)AS num'或引用评论的任何其他标识符。 –
谢谢你们,非常感谢! –
正如您所标记orientdb
,下面是类似的Cypher与OrientDB的途径之一。
select count(*) from (match {class:User}-->{class:Comment, as:r} return r)
可以深度甚至应用到搜索
随着AQL graph traversal在ArangoDB,含用户,评论和评论-2和边缘集合的顶点集合nodes
contrib
与边缘,你可以这样做:
RETURN COUNT(
FOR v IN 1..5 INBOUND "nodes/comment" contrib
FILTER v._key == "user"
RETURN 1
)
沿入站方向在contrib
集合中的所有边沿之后,遍历开始于注释节点,深度从1到5不等。应用过滤器将遍历限制为以用户结束的路径。
找到的两条路径是comment <-- user
和comment <-- comment-2 <-- user
。对于这两条路径,返回一个常量值(我们实际上并不需要节点中的任何东西)。周围的RETURN COUNT()
语句计算子查询返回的结果数量,因此。
你也可以遍历其他方式,从评论到用户:
RETURN COUNT(
FOR v IN 1..5 OUTBOUND "nodes/user" contrib
FILTER v._key == "comment"
RETURN 1
)
在一个大图,你可以测试两个查询,看是否执行一个比另一个更好。还考虑使用traversal options,如bfs
(广度优先搜索)和uniqueVertices
进行查询优化。
- 1. 聚合节点和关系
- 2. PostgreSQL聚合节点递归
- 3. neo4j节点聚合过滤器
- 4. 简单的节点与聚合物
- 5. 层次结构查询 - 聚合节点
- 6. 使用$ scope变量的节点聚合
- 7. 如何在XSLT 1.0中聚合节点?
- 8. Neo4j聚合/连接节点的数量
- 9. 合并节点
- 10. 删除节点从选择/组合javascript
- 11. sql-xml:选择节点集合
- 12. 使用xPath和联合选择节点
- 13. 选择和操作混合节点
- 14. 数据点聚合组
- 15. sql server聚合浮点值
- 16. 从节点选择中选择节点
- 17. Neo4j:具有大量节点的缓慢聚合
- 18. 聚合物观察节点不起作用
- 19. 使用聚合物和节点Js上传图片
- 20. 如何使用节点-js使用聚合函数
- 21. SQL XML列过滤器基于XML节点聚合函数
- 22. 聚合物1.0子元素不向父节点发射
- 23. 从子树节点聚合值的算法
- 24. 如何在飞镖聚合物中设计分布式节点
- 25. 基于新家长条件下的聚合节点
- 26. MongoDB节点驱动程序当前聚合的计数
- 27. 聚合聚合(ARRAY_AGG)?
- 28. XSL存储节点集合中可变
- 29. 选择与聚合函数
- 30. 聚合物和jQuery选择
图中的边缘/关系类型是什么? – InverseFalcon