Neo4j 如何在cypher子查询中获取最大值

Neo4j 如何在cypher子查询中获取最大值,neo4j,cypher,Neo4j,Cypher,我已经阅读了关于子查询的问题,但仍然坚持使用这个用例 我有包含一个或多个关键字的文档,每个文档都链接了用户注释和状态属性。我只想获取查询中每个文档返回的最新状态(如果存在)。如果我像下面这样运行一个查询,我只得到一行 MATCH (d:Document)-[:Keys]->(k:Keywords) WITH d,k OPTIONAL MATCH (d)--(c:Comments) ORDER BY c.created DESC LIMIT 1 RET

我已经阅读了关于子查询的问题,但仍然坚持使用这个用例

我有包含一个或多个关键字的文档,每个文档都链接了用户注释和状态属性。我只想获取查询中每个文档返回的最新状态(如果存在)。如果我像下面这样运行一个查询,我只得到一行

    MATCH (d:Document)-[:Keys]->(k:Keywords)
    WITH d,k
    OPTIONAL MATCH (d)--(c:Comments)
    ORDER BY c.created DESC LIMIT 1
    RETURN d.Title as Title, k.Word as Keyword, c.Status as Status
我有数百份最新状态的文档要返回,如:

Title                      Keyword  Status
War in the 19th Century    WWI      Reviewed
War in the 19th Century    Weapons  Reviewed
The Great War              WWI      Pending
World War I                WWI      <null>
标题关键字状态
19世纪第一次世界大战回顾
回顾19世纪的战争武器
一战即将结束
第一次世界大战
我尝试过使用WITH子句进行多个查询,但还没有成功。如果您有任何建议,我们将不胜感激。

我们将解释如何限制每行的匹配结果,这将为您提供一些好的选择

编辑

下面是一个完整的示例,使用
apoc.cypher.run()
执行有限的子查询

MATCH (d:Document)-[:Keys]->(k:Keywords)
WITH d, COLLECT(k.Word) AS Keywords
// collect keywords first so each document on a row
CALL apoc.cypher.run('
 OPTIONAL MATCH (d)--(c:Comments)
 RETURN c
 ORDER BY c.created DESC
 LIMIT 1
', {d:d}) YIELD value
RETURN d.Title as Title, Keywords, value.c.status as Status

此查询应该执行您可能希望执行的操作:

MATCH (d:Document)-[:Keys]->(k:Keywords)
OPTIONAL MATCH (d)--(c:Comments)
WITH d, COLLECT(k.Word) AS Keywords, c
ORDER BY c.created DESC
WHERE c IS NOT NULL
RETURN d.Title as Title, Keywords, COLLECT(c)[0] AS Status

由于注释与文档相关,而不是文档/关键字对,因此为每个标题/状态对返回一组关键字更有意义。如果原始查询有效,它会多次返回相同的标题/状态对,每次都使用不同的关键字。

用例需要查找最新的注释,这需要使用
ORDER BY
以及
LIMIT
。在这种情况下,知识库文章中的任何技术都会有所帮助吗?是的!增加了一个例子。