Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Neo4j 如何在节点子节点(而不是其父节点)上使用ORDER BY和LIMIT?密码_Neo4j_Cypher - Fatal编程技术网

Neo4j 如何在节点子节点(而不是其父节点)上使用ORDER BY和LIMIT?密码

Neo4j 如何在节点子节点(而不是其父节点)上使用ORDER BY和LIMIT?密码,neo4j,cypher,Neo4j,Cypher,我有一组作者节点。Author节点是多个Book节点的单亲 我的目标是:打印所有Author节点,无顺序、无限制,每个作者的前三本书按字母顺序排列 所需输出:(让我们假设书名是一个字母) 我的问题: 我试过这个: MATCH(author:Author) WITH author OPTIONAL MATCH(author)-[:WROTE]->(book:Book) WITH author, book ORDER BY book.name LIMIT 3 WITH author, co

我有一组
作者
节点。
Author
节点是多个
Book
节点的单亲

我的目标是:打印所有
Author
节点,无顺序、无限制,每个作者的前三本书按字母顺序排列

所需输出:(让我们假设书名是一个字母)

我的问题: 我试过这个:

MATCH(author:Author)
WITH author

OPTIONAL MATCH(author)-[:WROTE]->(book:Book)
WITH author, book
ORDER BY book.name
LIMIT 3

WITH author, collect(book) AS books
RETURN collect (
  {
    name: author.name,
    books: books
  }
);
但这给了:

[
  {
    "name" : "Leo Tolstoy",
    "books": [
      { "name": "A" },
      { "name": "B" },
    ]
  },

  {
    "name": "Charles Dickens",
    "books": [
      { "name": "C" }
    ]
  }
]
如何在Neo4j v3.5中实现所需的输出?

[编辑]

这应该起作用:

MATCH(author:Author)
OPTIONAL MATCH(author)-[:WROTE]->(book:Book)
WITH author, book.name AS bookName
ORDER BY bookName
WITH author, COLLECT({name: bookName})[..3] AS bookNames
RETURN COLLECT({name: author.name, books: bookNames}) AS result

您需要在可选匹配和collect之间进行排序,但这是可行的。这是适用于本案例的几种方法之一,此知识库条目涵盖了其他方法:谢谢!我知道如何限制每个作者的书单。但是,如何在这个查询中对图书名称进行排序?我试着把
按书名排序
放在第三行之后,但这似乎没有改变任何事情。我已经更新了答案,以便对书名进行排序。
MATCH(author:Author)
OPTIONAL MATCH(author)-[:WROTE]->(book:Book)
WITH author, book.name AS bookName
ORDER BY bookName
WITH author, COLLECT({name: bookName})[..3] AS bookNames
RETURN COLLECT({name: author.name, books: bookNames}) AS result