2017-02-03 9 views
0

2つのフィールドを使用して制約を作成する方法はありますか。例えば。2つのフィールドを使用して制約を作成する方法

CREATE CONSTRAINT ON(m:BBG_Security_DATA)ASSERT m.ISIN、m.CUSIP IS UNIQUE;

上記のcypherステートメントを実行しているときに、エラーメッセージが表示されます。

おかげで、 Shafeeque

+0

この質問は尋ねたと前に何回も回答されています。たとえば、http://stackoverflow.com/questions/41862488/creating-constraint-on-multiple-properties-in-neo4j/41863964#41863964の質問2と受け入れられた回答を参照してください。 – cybersam

答えて

1

あなたはAPOCからtriggersを使用することができます。

CREATE INDEX ON :BBG_Security_DATA (ISIN); 

CREATE INDEX ON :BBG_Security_DATA (CUSIP); 

CALL apoc.trigger.add(':BBG_Security_DATA (ISIN,CUSIP) IS UNIQUE', ' 
    UNWIND {createdNodes} AS n 
    WITH n 
     WHERE ALL(l in ["BBG_Security_DATA"] WHERE l in LABELS(n)) AND 
       ALL(k in ["ISIN", "CUSIP"] WHERE k in keys(n)) 
    MATCH (t:BBG_Security_DATA) 
      WHERE t<>n AND 
       ALL(k in ["ISIN", "CUSIP"] WHERE t[k] = n[k]) 
    DETACH DELETE n 
', {phase:'before'}); 
+0

非常にきれいで、apocトリガをあまり見なかった。あなたがこれに違反しても警告を発するようには見えませんが、違反しているノードはただ削除されますか? – InverseFalcon

+0

「トランザクションIDはまだ割り当てられていません。トランザクションコミット中に割り当てられます。 ' –

+0

はい、それほど良くありませんが、問題を解決します。 –

0

この現在のNeo4jによってサポートされていません。ただし、この種の動作を強制するために独自の拡張機能(おそらくTransactionEventHandlerを使用)をコーディングすることができます。

関連する問題