php - Neo4j 中的密码限制包括重复行

标签 php neo4j cypher neo4jphp

将 Neo4J 与 Cypher 结合使用

我正在尝试获取本质上是用户“墙”的东西。在此墙上是您、您的 friend 的帖子和帖子评论。

到目前为止,这是我的查询:

match (a:Account)-[:FRIEND*0..1]->(friend:Account)-[:POST]->(post:Post)
where a.uid = "u132984734sas"
optional match (post)<-[:COMMENT*0..1]-(comment:Comment)<-[:AUTHOR]-(commentAuthor:Account)
return friend,post,comment,commentAuthor
ORDER BY post.date_created DESC
LIMIT 10

注意 LIMIT 10

好吧,我有一半预料到了这一点,但很像 PHP 中的 Doctrine 在获取嵌套的事物数组时,这里返回一行,其中包含顶级帖子和帖子中每个评论的单个评论。

这意味着,如果有 20 个帖子符合此条件但未获取评论,它将返回 10 个实际帖子,这要归功于 LIMIT 条件
假设前 10 个结果中的单个帖子有 2 个评论,现在结果集将只包含 9 个帖子而不是 10 个。因为第一条评论总是在第一行返回(如果可用),它不会影响表单结果集返回的数字,但每个帖子的每条额外评论都会。

我想在这里获得可靠的 10 个结果,但我不确定在这里做什么。

为简洁起见,我使用 Everyman\Neo4JPHP

我什至考虑过查询 50 个帖子并通过只选择前 10 个结果进行修剪,但这显然不对哈哈

最佳答案

这是@FrobberOfBits 在他对该问题的评论中提出的建议的细微变化。

使用 aggregation 时,而不是创建两个集合(一个用于 comment,另一个用于 commentAuthor),您可以创建一个元素为 comment 的集合>commentAuthor 对。

MATCH (a:Account)-[:FRIEND*0..1]->(friend:Account)-[:POST]->(post:Post)
WHERE a.uid = "u132984734sas"
OPTIONAL MATCH (post)<-[:COMMENT*0..1]-(comment:Comment)<-[:AUTHOR]-(commentAuthor:Account)
RETURN friend,post, COLLECT({comment: comment, commentAuthor: commentAuthor}) AS comments
ORDER BY post.date_created DESC 
LIMIT 10

关于php - Neo4j 中的密码限制包括重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31980143/

相关文章:

neo4j - neo4j 中是否有用于社区检测的内部算法?

sql - 提高 Postgres 在多级自连接的类图查询上的性能(与 Neo4j 比较)

neo4j - 删除两个节点之间所有相同关系类型但仍保留其中一个

php - 检查用户权限

java - 将大型论坛数据从一个系统迁移到另一个系统

neo4j - 如何在密码中获取 map 的值

Neo4j 父子关系

neo4j - 获取节点/边创建/删除统计信息

php - 在 access_control 规则重定向后通知用户的最佳方式是什么?

php - Mysql - 从类别中获取最后一篇文章