我想在Neo4j中创建和操作属性数组

时间:2016-03-17 02:02:56

标签: neo4j cypher

我想在Neo4j中创建和操作属性数组。我是Graph Database和Neo4j的新手。我正在使用订阅组件构建成员资格图数据库。我需要该成员与每个订阅付费月份的数组属性相关联的LEDGER节点。我知道我可以为每次付款创建一个节点...但我试图整齐地将成员订阅分配给一个节点。根据我的理解到目前为止,我不能在数组属性中有一个键/值对...但是我可以将值分配给属性数组:

SET Ledger.AmtPaid [index] = amt 或者类似的东西...当我尝试这个时我会遇到错误:

CREATE (m:Member {name: "Michael"})
CREATE (l:Ledger {name: "Member Ledger", AmtPaid :[]})
CREATE (m)-[:PAID_INTO]->(l)

MATCH (m {name:"Michael"})--(l)
SET l.AmtPaid[0]="50"
Return l.AmtPaid[0];

1 个答案:

答案 0 :(得分:1)

不要忘记在查询中使用标签和rel-type

不幸的是,写入索引不起作用,因为Cypher将其集合视为不可变的。

您可以这样做:

MATCH (m:Member {name:"Michael"})-[:PAID_INTO]->(l)
SET l.AmtPaid = ["50"] + l.AmtPaid[1..]
Return l.AmtPaid[0];

or

MATCH (m:Member {name:"Michael"})-[:PAID_INTO]->(l)
SET l.AmtPaid = l.AmtPaid + ["50"]
Return l.AmtPaid[0];

or

MATCH (m:Member {name:"Michael"})-[:PAID_INTO]->(l)
SET l.AmtPaid = 
   reduce(a=[], idx in range(0,size(l.AmtPaid) | 
          a + case idx when 0 then ["50"] else [l.AmtPaid[idx]] end)
Return l.AmtPaid[0];