Как использовать ORDER BY и LIMIT для детей узла, но не для их родителей? зашифровывать - PullRequest
0 голосов
/ 11 апреля 2020

У меня есть набор Author узлов. Узел Author является единственным родителем нескольких узлов Book.

Моя цель: напечатать все узлы Author без порядка и без ограничений, с первыми тремя книгами каждого автора в алфавитном порядке.

Желаемый вывод : (давайте представим, что названия книг - одна буква)

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

  {
    "name": "Charles Dickens",
    "books": [
      { "name": "C" },
      { "name": "E" },
      { "name": "F" }
    ]
  },

  {
    "name": "Oscar Wilde
  ...
]

Моя проблема : я пробовал это:

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?

1 Ответ

1 голос
/ 11 апреля 2020

[EDITED]

Это должно работать:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...