Neo4J:如何为每个收集按1递增属性

Neo4J:如何为每个收集按1递增属性,neo4j,Neo4j,如何将属性增量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) 获得以下信息的动态方式是什么: SET re

如何将属性增量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)
获得以下信息的动态方式是什么:

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


谢谢

您有一个无关的
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
    )会自动将分组键(如
    节点
    )视为DISTINCT
  • 通常无法预测来自
    node2
    的两个关系中的哪一个最终将被分配
    属性
    0
    1
    。我想你真的不在乎
(relcol[i])我试过一个关卡,但不知道该放什么。明亮的谢谢