将 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/