Я хотел бы знать, когда я смогу использовать свои собственные функции для создания вычисленного поля внутри Cypher.Расчетное поле с двумя коллекциями
Позвольте мне дать вам пример того, что я хочу:
START a=node(0)
MATCH path=a-[rel*1..3]->b
WITH path,b,extract(r in RELATIONSHIPS(path) : r.property1) as Collection1,extract(r in RELATIONSHIPS(path) : r.property2) as Collection2
RETURN b,Collection1,Collection2
Это даст мне что-то вроде:
Collection1 : | Collection2 :
[property1.1,property1.2] | [property2.1,property2.2]
[property1.1] | [property2.1]
etc.
Я хотел бы добавить поле с property1.1 * свойство2. 1 + свойство1.2 * property2.2 и некоторые другие функции (например, exp() и ln(), они правы в cypher2.0?). Можно ли сделать это сегодня с помощью cypher? Я знаю, что есть функция Reduce(), но как я могу сделать, чтобы пройти 2 коллекции одновременно?
Если бы я мог назвать свою собственную функцию, это помогло бы мне: что-то вроде «myFunction ([collection1], [collection2]) как myResult».
Заранее спасибо.
Спасибо за ваш ответ. Я хочу это сделать, но для каждого отношения пути, а не только для последнего. – user2754635
Например, если в пути есть 2 отношения, я хочу R.p11 * R.p12 + R.p21 * R.p22. Если есть 3 отношения, я хочу: R.p11 * R.p12 + R.p21 * R.p22 + R.p31 * R.p32 (с pab, a как число отношений и b как число имущество). Вы предлагаете следующее: R.p21 * R.p22 или R.p31 * R.p32. Как я отношусь к предыдущим отношениям? Они нужны мне. – user2754635
Он извлекает последние отношения каждого возвращаемого пути.Поскольку каждый возвращаемый путь является последним возвращенным путем и новым отношением, он фактически извлекает все отношения между начальным узлом и конечным узлом. Например, для пути между a-> b-> c-> d запрос для «Match path = a- [rel: * 1..3] -> d" вернет пути, a-> b , a-> b-> c, a-> b-> c-> d. поэтому, получив последнюю связь каждого возвращаемого пути, вы фактически получаете все отношения от a до d, а не последние отношения a от d. –