apoc вернул преобразование пути в сгруппированные данные

это скриншот образца графика:

образец графика

пример генерации данных графика:

CREATE (r:Red {key:'someid'})
CREATE (t1:Teal)
CREATE (t2:Teal)
CREATE (t3:Teal)
CREATE (t4:Teal)
CREATE (t5:Teal)
CREATE (t6:Teal)
CREATE (r2:Red)
CREATE (b1:Blue)
CREATE (b2:Blue)
CREATE (b3:Blue)
CREATE (b4:Blue)
CREATE (f:FINAL_NODE)
CREATE (r)<-[:TO_ACTIVE_DRAFT]-(t1)
CREATE (r)<-[:TO_ACTIVE_DRAFT]-(t2)
CREATE (r)<-[:TO_ACTIVE_DRAFT]-(t3)
CREATE (r)<-[:TO_ACTIVE_DRAFT]-(t4)
CREATE (r)<-[:TO_ACTIVE_DRAFT]-(t5)
CREATE (r)<-[:TO_ACTIVE_DRAFT]-(t6)
CREATE (t1)<-[:TO_ATL]-(r2)
CREATE (t2)<-[:TO_ATL]-(r2)
CREATE (t3)<-[:TO_ATL]-(r2)
CREATE (t4)<-[:TO_ATL]-(r2)
CREATE (t5)<-[:TO_ATL]-(r2)
CREATE (t6)<-[:TO_ATL]-(r2)
CREATE (r2)<-[:TO_ACTIVE_DRAFT]-(b1)
CREATE (r2)<-[:TO_ACTIVE_DRAFT]-(b2)
CREATE (r2)<-[:TO_ACTIVE_DRAFT]-(b3)
CREATE (r2)<-[:TO_ACTIVE_DRAFT]-(b4)
CREATE (b1)-[:TO_FINAL]->(f)
CREATE (b2)-[:TO_FINAL]->(f)
CREATE (b3)-[:TO_FINAL]->(f)
CREATE (b4)-[:TO_FINAL]->(f)

если мой запрос выглядит так:

MATCH (f:Red {key:'someid'}) 
CALL apoc.path.expand(f, '<TO_ACTIVE_DRAFT|<TO_ATL|TO_FINAL>', '>FINAL_NODE',-1,-1) yield path as p

RETURN p

при использовании браузера и просмотре табличного представления похоже, что данные возвращаются в виде отдельных путей в массиве. Итак, массив внутри массива.

[
  [
     {red},
     {relationship},
     {teal},
     {relationship},
     {red},
     {relationship},
     {blue},
     {relationship},
     {green}
  ],
  [
     {red},
     {relationship},
     {teal},
     {relationship},
     {red},
     {relationship},
     {blue},
     {relationship},
     {green}
  ],
  etc
]

{} - это свойства каждого узла и отношения.

Если я использую

Узлы возврата (p)

он просто дает мне список всех элементов без глубины, и если я попытаюсь использовать размер или длину с путем, в этом случае все они будут равны 5 и не предоставят мне отдельные узлы.

Чего я действительно хотел бы, так это иметь возможность воссоздавать уровни графика, чтобы в идеале данные возвращались следующим образом:

[
  [
    {red}
  ],[
    {teal},
    {teal},
    {teal},
    {teal},
    {teal},
    {teal}
  ],[
    {red}
  ],[
    {blue},
    {blue},
    {blue},
    {blue},
    {blue},
    {blue},
    {blue}
  ],[
    {green}
  ]
]

Возможно ли это с помощью функции расширения, или мне нужно выяснить, как сделать то же самое со стандартным шаблоном с помощью шифра, то есть MATCH (r) - [: *] - (final)?

// пара уточнений: количество маршрутов и узлов может быть произвольным. Итак, в этом примере это красный, бирюзовый, красный, синий, зеленый. Это может быть красный, бирюзовый, красный, бирюзовый, красный, синий, зеленый. Может быть просто красный, синий, зеленый.

Я использую C # и драйвер neo4j, если это имеет значение для того, какие данные я могу получить. Пример ответа, который я получаю, просто возвращая путь в C #.

[{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":20,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":25,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":5,"Type":"TO_ACTIVE_DRAFT","StartNodeId":20,"EndNodeId":0,"Properties":{}},{"Id":11,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":20,"Properties":{}},{"Id":15,"Type":"TO_ACTIVE_DRAFT","StartNodeId":25,"EndNodeId":21,"Properties":{}},{"Id":19,"Type":"TO_FINAL","StartNodeId":25,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":20,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":24,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":5,"Type":"TO_ACTIVE_DRAFT","StartNodeId":20,"EndNodeId":0,"Properties":{}},{"Id":11,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":20,"Properties":{}},{"Id":14,"Type":"TO_ACTIVE_DRAFT","StartNodeId":24,"EndNodeId":21,"Properties":{}},{"Id":18,"Type":"TO_FINAL","StartNodeId":24,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":20,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":23,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":5,"Type":"TO_ACTIVE_DRAFT","StartNodeId":20,"EndNodeId":0,"Properties":{}},{"Id":11,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":20,"Properties":{}},{"Id":13,"Type":"TO_ACTIVE_DRAFT","StartNodeId":23,"EndNodeId":21,"Properties":{}},{"Id":17,"Type":"TO_FINAL","StartNodeId":23,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":20,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":22,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":5,"Type":"TO_ACTIVE_DRAFT","StartNodeId":20,"EndNodeId":0,"Properties":{}},{"Id":11,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":20,"Properties":{}},{"Id":12,"Type":"TO_ACTIVE_DRAFT","StartNodeId":22,"EndNodeId":21,"Properties":{}},{"Id":16,"Type":"TO_FINAL","StartNodeId":22,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":5,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":25,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":4,"Type":"TO_ACTIVE_DRAFT","StartNodeId":5,"EndNodeId":0,"Properties":{}},{"Id":10,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":5,"Properties":{}},{"Id":15,"Type":"TO_ACTIVE_DRAFT","StartNodeId":25,"EndNodeId":21,"Properties":{}},{"Id":19,"Type":"TO_FINAL","StartNodeId":25,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":5,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":24,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":4,"Type":"TO_ACTIVE_DRAFT","StartNodeId":5,"EndNodeId":0,"Properties":{}},{"Id":10,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":5,"Properties":{}},{"Id":14,"Type":"TO_ACTIVE_DRAFT","StartNodeId":24,"EndNodeId":21,"Properties":{}},{"Id":18,"Type":"TO_FINAL","StartNodeId":24,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":5,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":23,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":4,"Type":"TO_ACTIVE_DRAFT","StartNodeId":5,"EndNodeId":0,"Properties":{}},{"Id":10,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":5,"Properties":{}},{"Id":13,"Type":"TO_ACTIVE_DRAFT","StartNodeId":23,"EndNodeId":21,"Properties":{}},{"Id":17,"Type":"TO_FINAL","StartNodeId":23,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":5,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":22,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":4,"Type":"TO_ACTIVE_DRAFT","StartNodeId":5,"EndNodeId":0,"Properties":{}},{"Id":10,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":5,"Properties":{}},{"Id":12,"Type":"TO_ACTIVE_DRAFT","StartNodeId":22,"EndNodeId":21,"Properties":{}},{"Id":16,"Type":"TO_FINAL","StartNodeId":22,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":4,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":25,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":3,"Type":"TO_ACTIVE_DRAFT","StartNodeId":4,"EndNodeId":0,"Properties":{}},{"Id":9,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":4,"Properties":{}},{"Id":15,"Type":"TO_ACTIVE_DRAFT","StartNodeId":25,"EndNodeId":21,"Properties":{}},{"Id":19,"Type":"TO_FINAL","StartNodeId":25,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":4,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":24,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":3,"Type":"TO_ACTIVE_DRAFT","StartNodeId":4,"EndNodeId":0,"Properties":{}},{"Id":9,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":4,"Properties":{}},{"Id":14,"Type":"TO_ACTIVE_DRAFT","StartNodeId":24,"EndNodeId":21,"Properties":{}},{"Id":18,"Type":"TO_FINAL","StartNodeId":24,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":4,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":23,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":3,"Type":"TO_ACTIVE_DRAFT","StartNodeId":4,"EndNodeId":0,"Properties":{}},{"Id":9,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":4,"Properties":{}},{"Id":13,"Type":"TO_ACTIVE_DRAFT","StartNodeId":23,"EndNodeId":21,"Properties":{}},{"Id":17,"Type":"TO_FINAL","StartNodeId":23,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":4,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":22,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":3,"Type":"TO_ACTIVE_DRAFT","StartNodeId":4,"EndNodeId":0,"Properties":{}},{"Id":9,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":4,"Properties":{}},{"Id":12,"Type":"TO_ACTIVE_DRAFT","StartNodeId":22,"EndNodeId":21,"Properties":{}},{"Id":16,"Type":"TO_FINAL","StartNodeId":22,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":3,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":25,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":2,"Type":"TO_ACTIVE_DRAFT","StartNodeId":3,"EndNodeId":0,"Properties":{}},{"Id":8,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":3,"Properties":{}},{"Id":15,"Type":"TO_ACTIVE_DRAFT","StartNodeId":25,"EndNodeId":21,"Properties":{}},{"Id":19,"Type":"TO_FINAL","StartNodeId":25,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":3,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":24,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":2,"Type":"TO_ACTIVE_DRAFT","StartNodeId":3,"EndNodeId":0,"Properties":{}},{"Id":8,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":3,"Properties":{}},{"Id":14,"Type":"TO_ACTIVE_DRAFT","StartNodeId":24,"EndNodeId":21,"Properties":{}},{"Id":18,"Type":"TO_FINAL","StartNodeId":24,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":3,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":23,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":2,"Type":"TO_ACTIVE_DRAFT","StartNodeId":3,"EndNodeId":0,"Properties":{}},{"Id":8,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":3,"Properties":{}},{"Id":13,"Type":"TO_ACTIVE_DRAFT","StartNodeId":23,"EndNodeId":21,"Properties":{}},{"Id":17,"Type":"TO_FINAL","StartNodeId":23,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":3,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":22,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":2,"Type":"TO_ACTIVE_DRAFT","StartNodeId":3,"EndNodeId":0,"Properties":{}},{"Id":8,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":3,"Properties":{}},{"Id":12,"Type":"TO_ACTIVE_DRAFT","StartNodeId":22,"EndNodeId":21,"Properties":{}},{"Id":16,"Type":"TO_FINAL","StartNodeId":22,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":2,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":25,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":1,"Type":"TO_ACTIVE_DRAFT","StartNodeId":2,"EndNodeId":0,"Properties":{}},{"Id":7,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":2,"Properties":{}},{"Id":15,"Type":"TO_ACTIVE_DRAFT","StartNodeId":25,"EndNodeId":21,"Properties":{}},{"Id":19,"Type":"TO_FINAL","StartNodeId":25,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":2,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":24,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":1,"Type":"TO_ACTIVE_DRAFT","StartNodeId":2,"EndNodeId":0,"Properties":{}},{"Id":7,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":2,"Properties":{}},{"Id":14,"Type":"TO_ACTIVE_DRAFT","StartNodeId":24,"EndNodeId":21,"Properties":{}},{"Id":18,"Type":"TO_FINAL","StartNodeId":24,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":2,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":23,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":1,"Type":"TO_ACTIVE_DRAFT","StartNodeId":2,"EndNodeId":0,"Properties":{}},{"Id":7,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":2,"Properties":{}},{"Id":13,"Type":"TO_ACTIVE_DRAFT","StartNodeId":23,"EndNodeId":21,"Properties":{}},{"Id":17,"Type":"TO_FINAL","StartNodeId":23,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":2,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":22,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":1,"Type":"TO_ACTIVE_DRAFT","StartNodeId":2,"EndNodeId":0,"Properties":{}},{"Id":7,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":2,"Properties":{}},{"Id":12,"Type":"TO_ACTIVE_DRAFT","StartNodeId":22,"EndNodeId":21,"Properties":{}},{"Id":16,"Type":"TO_FINAL","StartNodeId":22,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":1,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":25,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":0,"Type":"TO_ACTIVE_DRAFT","StartNodeId":1,"EndNodeId":0,"Properties":{}},{"Id":6,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":1,"Properties":{}},{"Id":15,"Type":"TO_ACTIVE_DRAFT","StartNodeId":25,"EndNodeId":21,"Properties":{}},{"Id":19,"Type":"TO_FINAL","StartNodeId":25,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":1,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":24,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":0,"Type":"TO_ACTIVE_DRAFT","StartNodeId":1,"EndNodeId":0,"Properties":{}},{"Id":6,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":1,"Properties":{}},{"Id":14,"Type":"TO_ACTIVE_DRAFT","StartNodeId":24,"EndNodeId":21,"Properties":{}},{"Id":18,"Type":"TO_FINAL","StartNodeId":24,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":1,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":23,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":0,"Type":"TO_ACTIVE_DRAFT","StartNodeId":1,"EndNodeId":0,"Properties":{}},{"Id":6,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":1,"Properties":{}},{"Id":13,"Type":"TO_ACTIVE_DRAFT","StartNodeId":23,"EndNodeId":21,"Properties":{}},{"Id":17,"Type":"TO_FINAL","StartNodeId":23,"EndNodeId":26,"Properties":{}}]}},{"p":{"Start":{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},"End":{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}},"Nodes":[{"Id":0,"Labels":["Red"],"Properties":{"key":"someid"}},{"Id":1,"Labels":["Teal"],"Properties":{}},{"Id":21,"Labels":["Red"],"Properties":{}},{"Id":22,"Labels":["Blue"],"Properties":{}},{"Id":26,"Labels":["FINAL_NODE"],"Properties":{}}],"Relationships":[{"Id":0,"Type":"TO_ACTIVE_DRAFT","StartNodeId":1,"EndNodeId":0,"Properties":{}},{"Id":6,"Type":"TO_ATL","StartNodeId":21,"EndNodeId":1,"Properties":{}},{"Id":12,"Type":"TO_ACTIVE_DRAFT","StartNodeId":22,"EndNodeId":21,"Properties":{}},{"Id":16,"Type":"TO_FINAL","StartNodeId":22,"EndNodeId":26,"Properties":{}}]}}]

[Дополнительные пояснения]

Более конкретный пример: если вы перемещаете животных, у вас есть источник рождения, а затем у вас есть несколько перемещений, пока вы не попадете на рынок. поэтому график выглядит как начальный снимок экрана, где красные узлы - это определенное место, в которое было перемещено животное, а бирюзовый и синий - это разные типы расписаний. Однако единственная информация, которую я знаю наверняка, - это то, где он сейчас находится (и какой красный узел), и я хочу добраться до источника рождения (зеленый узел). Количество перемещений и местоположений, в которых он побывал, варьируется. Возможно, он был перемещен один раз или же мог перемещаться x количество раз. Я действительно знаю, что пути ограничены тремя помеченными отношениями. Поэтому, хотя мне очень нравится синтаксис процедуры apoc, если я не могу управлять этим путем после его получения, то, возможно, мне просто нужно сделать что-то вроде

MATCH (f:Red {key:'someid'})
OPTIONAL MATCH (f)<-[:TO_ACTIVE_DRAFT|TO_ATL*]-()-[:SOURCE_FOR_INC]->(g:Green)
RETURN g

но для меня приведенное выше вернет только f или g, а не путь, поэтому он должен быть примерно таким:

MATCH (f:Red {key:'someid'})
p = OPTIONAL MATCH (f)<-[:TO_ACTIVE_DRAFT|TO_ATL*]-()-[:SOURCE_FOR_INC]->(g:Green)
RETURN p

который, я считаю, даст мне путь, но будет тот же сценарий, что и apoc, где я не могу преобразовать данные в группы ...


person GUID_33    schedule 02.06.2019    source источник
comment
Я бы не стал зацикливаться на конкретной процедуре APOC, поскольку она может быть слишком сложной, чтобы получить результаты в желаемом формате. Кажется, использование сырого Cypher должно работать. Но все еще не ясно, каков ваш вариант использования. Ожидаете ли вы, что каждый раз, когда вы делаете запрос, все совпадающие пути будут иметь один и тот же шаблон (в отношении последовательности узлов и отношений)?   -  person cybersam    schedule 02.06.2019
comment
@cybersam в этом случае я знаю, что хочу добраться до определенного помеченного узла. В моем примере выше он назван FINAL_NODE. На пути к FINAL_NODE, идущему от того места, где я нахожусь, я знаю, что это будет 2 типа отношений, а затем последний тип отношений (3-й тип) будет в другом направлении. в запросе apoc это ‹TO_ACTIVE_DRAFT |‹ TO_ATL | TO_FINAL ›. Я заставил его работать, где я могу получить последний в строке, используя обычный шифр, но не знаю, как правильно выполнить сопоставление с образцом. Если это все еще не имеет смысла, я могу попробовать привести еще примеры.   -  person GUID_33    schedule 02.06.2019
comment
Я прошу более четкое описание вашего общего варианта использования (а не конкретного, показанного в вашем вопросе, на который я уже дал ответ), поскольку это то, на что вы, кажется, хотите получить ответ.   -  person cybersam    schedule 03.06.2019
comment
@cybersam в конце поста я добавил некоторые дополнительные пояснения под дополнительными пояснениями. на самом деле речь идет о шаблоне переменных в средней части и возможности манипулировать данными. Судя по вашим ответам и ответам, кажется, что манипулировать данными пути, когда они являются переменным шаблоном, непросто или обычно. Я ценю время, потраченное на это. Если вам ничего не выскочит, не беда. Я просто придумаю другой способ   -  person GUID_33    schedule 04.06.2019
comment
Итак, совпадающие пути могут иметь разную длину, типы отношений могут иметь разный порядок, а узлы могут иметь разные типы?   -  person cybersam    schedule 04.06.2019
comment
@cybersam правильно, я точно знаю только начальный узел и конечный тип узла, к которому я хочу добраться, но все остальное является переменным   -  person GUID_33    schedule 05.06.2019
comment
Код Cypher должен быть возможным, но это потребует некоторых усилий и, вероятно, будет довольно сложным. Возможно, вам будет лучше просто взять результат MATCH p=(f:Red {key:'someid'}<-[:TO_ACTIVE_DRAFT|TO_ATL*]-()-[:SOURCE_FOR_INC]->(g:Green) RETURN p и сгенерировать нужные данные на каком-нибудь внешнем языке программирования. В большинстве случаев пути - это то, чего хотят люди, поэтому Сайфер ориентирован на это.   -  person cybersam    schedule 05.06.2019
comment
@cybersam Я согласен с тем, что попытки выполнить сложный шифровальный запрос не стоит того, когда я могу просто манипулировать, как только верну его в C #. Если вы сделаете этот комментарий другим ответом, я приму его, так как считаю его правильным. Кажется, что с таким путем типа переменной нет смысла пытаться манипулировать данными перед возвратом, как вы сказали.   -  person GUID_33    schedule 05.06.2019
comment
Добавлен новый ответ.   -  person cybersam    schedule 05.06.2019


Ответы (2)


Код Cypher должен быть возможным, но это потребует некоторых усилий и, вероятно, будет довольно сложным.

Возможно, вам лучше просто взять результат:

MATCH p=(f:Red {key:'someid'}<-[:TO_ACTIVE_DRAFT|TO_ATL*]-()-[:SOURCE_FOR_INC]->(g:Green)
RETURN p

и сгенерируйте нужные данные на каком-нибудь внешнем языке программирования. В большинстве случаев пути - это то, чего хотят люди, поэтому Сайфер ориентирован на это.

person cybersam    schedule 05.06.2019

Этот запрос (с некоторыми предполагаемыми метками узлов), который не использует процедуру APOC, может сработать для вас:

MATCH (f:Node {key:'someid'})
  <-[:TO_ACTIVE_DRAFT]-(t:Teal)
  <-[:ATL_TO_DRAFT]-(r:Red)
  <-[:TO_ACTIVE_DRAFT]-(b:Blue)
  -[:SOURCE_FOR_INC]->(g:Green)
RETURN COLLECT(DISTINCT f), COLLECT(DISTINCT t), COLLECT(DISTINCT r), COLLECT(DISTINCT b), COLLECT(DISTINCT g)
person cybersam    schedule 02.06.2019
comment
к сожалению, у меня нет гарантированного пути, но это именно то, что я пытаюсь вернуть. Я обновил вопрос, добавив это уточнение и образец данных. Кажется, что во всех примерах apoc они в основном просто возвращают полученный результат и ничего с ним не делают. Я ищу возможность создать график, аналогичный тому, что создается в пользовательском интерфейсе браузера, но только с определенными свойствами. Это означает попытку узнать, где подходит узел, но я, кажется, теряю весь контекст при перемещении его на узлы и не совсем уверен, насколько хорош возвращаемый путь - person GUID_33; 02.06.2019