我有一个节点链,我想为每个节点添加一个属性"DtaID"
,并且值应该在链中增加。有没有办法用Cypher做到这一点?
答案 0 :(得分:1)
我认为你有这种格式的节点链:
create (:Node)-[:LINK]->(:Node)-[:LINK]->(:Node)-[:LINK]->(:Node)-[:LINK]->(:Node)-[:LINK]->(:Node)-[:LINK]->(:Node)
然后我使用了这个Cypher:
// Get the path between the start and end nodes, including both
MATCH p = (start:Node)-[:LINK*]->(end:Node)
WHERE NOT (end)-[:LINK]->() AND NOT ()-[:LINK]->(start)
// extract the nodes of p and calc an array of indexes to
// access each node in the array of nodes called `nodes`.
WITH nodes(p) as nodes, range(0, size(nodes(p))) AS indexes
// unwind indexes as index...
UNWIND indexes AS index
// set the value of `DtaID` property of each nodes to the index value.
// That is: the node 0 will have `DtaID` equal to 0.
// I'm assuming that you need an increment by one. If you need a
// different increment you can do calculations here. For example:
// SET (nodes[index]).DtaID = index * 10 to increment by 10.
SET (nodes[index]).DtaID = index
结果:
╒═══════════╕
│"n" │
╞═══════════╡
│{"DtaID":0}│
├───────────┤
│{"DtaID":1}│
├───────────┤
│{"DtaID":2}│
├───────────┤
│{"DtaID":3}│
├───────────┤
│{"DtaID":4}│
├───────────┤
│{"DtaID":5}│
├───────────┤
│{"DtaID":6}│
└───────────┘
如果需要使用第一个节点的DtaID
值作为基值,可以将第一个节点传递给WITH
子句并用于计算。
MATCH p = (start:Node)-[:LINK*]->(end:Node)
WHERE NOT (end)-[:LINK]->() AND NOT ()-[:LINK]->(start)
WITH start, nodes(p) as nodes, range(0, size(nodes(p))) AS indexes
UNWIND indexes AS index
SET (nodes[index]).DtaID = start.DtaID + index