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
。在这种情况下,知识库文章中的任何技术都会有所帮助吗?是的!增加了一个例子。