Хотя нет способа создать ограничение уникальности, охватывающее несколько узлов, ниже приведен запрос Cypher, который показывает, как можно выполнить тест уникальности, охватывающий 2 узла, перед созданием одного из узлов (при необходимости):
OPTIONAL MATCH (a:A), (b:B)
WHERE a.property1 = $p1 AND b.property1 = $p2
FOREACH(x IN CASE WHEN a IS NULL THEN [1] END |
MERGE (a:A {property1: $p1}))
В запросе предполагается, что p1
и p2
передаются как параметры . Если либо a.property1 = $p1
ИЛИ b.property1 = $p2
имеют значение false, то a
будет нулевым после предложения WHERE
. Таким образом, предложение FOREACH
создаст (при необходимости через предложение MERGE
) один из этих узлов только в случае сбоя теста на уникальность нескольких узлов. MERGE
используется, чтобы избежать создания этого узла, если он уже существует.