2015-05-19 3 views
3

позволяет сказать, у нас есть база данных с (: TvShow) - [: содержать] -> (: Сезон) - [: содержать] -> (: Episode)Neo4j высчитывать возвращение структурирована карта

Теперь позволяет сказать , нужно запросить базу данных для конкретного: TvShow и получить результат, сформированный таким образом: {tvshow: // Узел tvShow //, сезоны: [{сезон: // Сезонный узел //, эпизоды: [// эпизод узел //]}]}

Для Exemple: если мы имеем OneShow 2 года и 3episodes

результат будет объект JSON: {tvshow: OneShow, сезоны: [{сезон: сезон1, [эпизод1-1, эпизод1-2, эпизод1-3]}, {сезон: сезон1, [эпизод2-1, эпизод2-2, эпизод2-3]}]}

Я пытаюсь работать с WITH, собирать, FOREACH и оператором массива «+», но пока не успел.

Кто-нибудь это сделал раньше?

ответ

7

На основе следующего Neo4j консоли набора данных http://console.neo4j.org/r/7uru0d, вы можете достичь его таким образом:

MATCH (n:TvShow)-[:HAS_SEASON]->(season)-[:HAS_EPISODE]->(episode) 
WITH n, season, collect(episode) AS ep 
RETURN { show: n.id, seasons:collect({ season: season.name, episodes: ep })} AS shows 
+0

Ваш высчитывать работает отлично, спасибо. За исключением того, что в моем приложении (а не в вашем примере) адресаты возвращаются как объекты: например, [valeur1, valeur2] возвращается {'0': valeur1, '1': valeur2}. Вы когда-нибудь видели это поведение? Это может быть от Seraph модуль node.js, который я использую для связи с Neo4j. – Hugo

+0

Ну коллекции упорядочены по ключам, возможно, вы можете разместить свой js-код в своем вопросе –

+0

Никогда не комментируйте мой комментарий, я подтвердил, что проблема с формированием массива исходит из вопроса № 147 от Seraph. Спасибо Кристоф – Hugo