Neo4j 如何返回按创建时间排序的前10个节点及其外边缘数

Neo4j 如何返回按创建时间排序的前10个节点及其外边缘数,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,我正在使用Neo4j对我的数据进行建模。我有两个资源:帖子和评论。每个帖子都可能有指向几个评论的边,这意味着评论在这个帖子下面 现在,我想向用户显示帖子列表,因此我必须获取在创建时按顺序排列的帖子。同时,我还需要返回这些帖子下的评论编号 谁能告诉我如何在Neo4j中使用Cypher有效地实现它 我试过了 MATCH (p:Post)-[:COMMENT]->(c:Comment) RETURN id(p), count(c) ORDER BY p.created_at SKIP 10 L

我正在使用Neo4j对我的数据进行建模。我有两个资源:帖子和评论。每个帖子都可能有指向几个评论的边,这意味着评论在这个帖子下面

现在,我想向用户显示帖子列表,因此我必须获取在创建时按顺序排列的帖子。同时,我还需要返回这些帖子下的评论编号

谁能告诉我如何在Neo4j中使用Cypher有效地实现它

我试过了

MATCH (p:Post)-[:COMMENT]->(c:Comment) 
RETURN id(p), count(c)
ORDER BY p.created_at
SKIP 10
LIMIT 10;
但收到一个错误:

SyntaxException: Unknown identifier `p`.

您可以通过使用
WITH
子句和
ORDER by
子句来实现这一点:

MATCH (p:Post)-[:COMMENT]->(c:Comment)
WITH p AS post, count(c) AS numberOfComments 
ORDER BY post.created_at
RETURN id(post), numberOfComments
LIMIT 10
MATCH (p:Post)-[:COMMENT]->(c:Comment)
WITH p AS post, count(c) AS numberOfComments 
RETURN id(post), numberOfComments
ORDER BY post.created_at
LIMIT 10
MATCH
本身就说明了这一点,
WITH
子句为变量
post
numberOfComments
分配了一些值,而这些值又可以在最后的
RETURN
子句之前由可选的
ORDER by
子句约束。
限制10
将结果限制在前十个帖子

您也可以将
ORDER BY
子句放在
RETURN
之后,但仍然需要
WITH
子句:

MATCH (p:Post)-[:COMMENT]->(c:Comment)
WITH p AS post, count(c) AS numberOfComments 
ORDER BY post.created_at
RETURN id(post), numberOfComments
LIMIT 10
MATCH (p:Post)-[:COMMENT]->(c:Comment)
WITH p AS post, count(c) AS numberOfComments 
RETURN id(post), numberOfComments
ORDER BY post.created_at
LIMIT 10

请注意,您可能不希望使用
SKIP 10
子句,因为它将跳过实际的前十篇文章,因此您的结果将从第十一篇文章开始,并限制到第二十篇文章。

谢谢:)但我不确定这样的查询是否快速。在我的测试数据库中,有27500个帖子,每个帖子平均有10条评论。这样的查询平均花费1800ms。我正在使用带有i5 CPU的MacBook Air。是不是太慢了?…@HanXu在性能方面我不是专家,但取决于您开发的应用程序,它可能慢,也可能不慢。你有什么安排吗?这可能会加快事情的发展。我不知道有什么更好的办法。这个答案应该能解决你提出的问题。