Neo4J: Как увеличить свойство на 1 для каждого сбора - PullRequest
1 голос
/ 05 февраля 2020

Как увеличить свойство на 1, начиная с 0 для каждого нового набора сбора?

ЕСЛИ БЫ ДАННЫЕ УСТАНОВЛЕНЫ:

MERGE (node1 {Property: 1})-[rel1:REL]->(nodeA {Property: "A"})
MERGE (node2 {Property: 2})
MERGE (nodeB {Property: "B"})
MERGE (node2)-[rel2:REL]->(nodeA)
MERGE (node2)-[rel3:REL]->(nodeB)

ЧТО БЫ ДИНАМИИ C ПУТЬ К GET:

SET rel1.Property=0
SET rel2.Property=0
SET rel3.Property=1

ЧТО-ТО КАК:

MATCH (node)-[rel:REL]->()
WITH DISTINCT node, COLLECT(rel) as relcol
FOREACH(r IN relcol | 
   foreach (i IN RANGE(0, SIZE(relcol)-1) | 
       SET (r[i]).Property = (i + 1)   ))

За исключением того, что выдает ошибку:

Neo.ClientError.Statement.TypeError: Ожидается, что Long (0) будет org.neo4j.values.storable.TextValue, но это было org.neo4j.values.storable.LongValue

Спасибо!

1 Ответ

1 голос
/ 05 февраля 2020

У вас был посторонний уровень FOREACH; и вы должны были использовать relcol[i] вместо r[i] и i вместо i + 1.

Это должно работать лучше:

MATCH (node)-[rel:REL]->()
WITH node, COLLECT(rel) as relcol
FOREACH (i IN RANGE(0, SIZE(relcol)-1) | SET (relcol[i]).Property = i)
  • DISTINCT не требуется для вашего предложения WITH, поскольку агрегирующие функции (например, COLLECT) автоматически обрабатывают ключи группировки (например, node) как отличающиеся.
  • В общем, пути нет чтобы предсказать, какому из 2 отношений из node2 будет присвоено значение Property, равное 0 или 1. Я полагаю, вам все равно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...