#neo4j #cypher
#neo4j #шифр
Вопрос:
Учитывая такой запрос
match (u:User)-[]-gt;(p:Project) return 'x' as row_number, u, p
Как мне вывести набор результатов, подобный этому, с номером строки row_number в качестве номера строки?
╒════════════╤═════════════════╤══════════════════╕ │"row_number"│"u" │"p" │ ╞════════════╪═════════════════╪══════════════════╡ │"x" │{"name":"Martin"}│{"name":"Martin2"}│ ├────────────┼─────────────────┼──────────────────┤ │"x" │{"name":"Martin"}│{"name":"Martin1"}│ ├────────────┼─────────────────┼──────────────────┤ │"x" │{"name":"Bob"} │{"name":"Bob2"} │ ├────────────┼─────────────────┼──────────────────┤ │"x" │{"name":"Bob"} │{"name":"Bob1"} │ └────────────┴─────────────────┴──────────────────┘
Ответ №1:
Я придумал это:
match (u:User)-[]-gt;(p:Project) with collect([u,p]) as col unwind range(0, size(col)-1) as un return un as row, col[un][0] as User, col[un][1] as Project
Какие результаты:
╒═════╤═════════════════╤══════════════════╕ │"row"│"User" │"Project" │ ╞═════╪═════════════════╪══════════════════╡ │0 │{"name":"Martin"}│{"name":"Martin2"}│ ├─────┼─────────────────┼──────────────────┤ │1 │{"name":"Martin"}│{"name":"Martin1"}│ ├─────┼─────────────────┼──────────────────┤ │2 │{"name":"Bob"} │{"name":"Bob2"} │ ├─────┼─────────────────┼──────────────────┤ │3 │{"name":"Bob"} │{"name":"Bob1"} │ └─────┴─────────────────┴──────────────────┘
Комментарии:
1. Я думаю, что ваш короче =gt; лучше. Молодец 😉
Ответ №2:
Это должно сделать это:
MATCH (n)-[]-gt;(m) WITH COLLECT([n,m]) AS rows WITH REDUCE(arr=[], i IN RANGE(0,SIZE(rows)-1) | arr [[i] rows[i]] ) AS rowsWithNumber UNWIND rowsWithNumber As rowWithNumber RETURN rowWithNumber[0] AS row_number, rowWithNumber[1] AS n, rowWithNumber[2] AS m