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