2016-03-17 3 views
2

Я хочу создать и обработать массив свойств в Neo4j. Я новичок как в базе данных Graph, так и в Neo4j. Я создаю базу данных графа членства с компонентом подписки. Мне нужен член для связи с узлом LEDGER с свойством массива для каждого месяца подписки. Я знаю, что могу создать узел для каждого сделанного платежа ... но я пытаюсь аккуратно назначить подписку участника на один узел. Из того, что я понимаю до сих пор, я не могу иметь пару Key/Value в свойстве Array ... но могу ли я присвоить значения массиву свойств:Я хочу создать и обработать массив свойств в Neo4j

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

не забудьте использовать этикетки и REL-тип в запросе

к сожалению, записи в индекс не работает, как 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]; 
+0

Майкл спасибо за ответ. Однако ни один из этих вариантов не дает ответа. Кроме того, вы говорите, что мы не можем манипулировать массивами в Neo4j или просто Cypher? Это можно сделать на Java? – MichaelE

Смежные вопросы