サイファーの全体的な目標は、アイテムにステータスを割り当て、以前のステータスをアーカイブとして保持することです。存在しない場合、サイファー関係を作成する
neo4j 3.0のノードとして項目がある場合、リストがあります。各アイテムは、Live、Dead、Missing、または私が定義した他のステータスのいずれかのステータスを持つことができます。
まず、ステータスがliveのノードを作成します。
Merge (n:Item {itemID: '123'}
ON CREATE set n.itemID = '123, ...
ON MATCH set n.DTS = ...
WITH n
MATCH (st:Status {name:'Live'})
MERGE (n)-[CURRENT_STATUS {DTS: ...}]->(st)
これは問題なく動作します。
ステータスを変更する場合は、CURRENT_STATUSのコピーを作成して削除し、新しいステータスの新しいステータスを作成します。新しいステータスが現在のステータスと異なる場合にのみ、これを行う必要があります。ここで私が試したものを(「行方不明」の下の項目に割り当てる必要があります新しい状態である)されています
Merge (n:Item {itemID: '123'}
ON CREATE set n.itemID = '123, ...
ON MATCH set n.modifiedDTS = ...
WITH n
MATCH (n)-[cs:CURRENT_STATUS]-(st:Status)
WITH n, st, CASE st.name WHEN 'Missing' THEN [] ELSE [n] END as array, cs
FOREACH (x in array |
CREATE (x)-[prevStatus:PREVIOUS_STATUS {DTS: cs.DTS}]->(st)
DELETE cs
CREATE (x)-[newStatus:CURRENT_STATUS {DTS: 123}]->(st2:Status {name:'Missing'})
)
return *;
残念ながら、これは動作しません。ループは既存のステータスを削除していますが、PREVIOUS_STATUSまたはCURRENT_STATUSの関係は決して作成しません。エラーはありません。
私はここで何が不足していると思いますか?