Можно ли создать уникальное ограничение для нескольких свойств в нескольких узлах в neo4j? - PullRequest
1 голос
/ 08 апреля 2020

Допустим, у меня есть две метки A, B в Neo4j. Можно ли создать что-то вроде следующего?

создать ограничение, где A.property1 и B.property2 уникальны.

Ответы [ 2 ]

0 голосов
/ 08 апреля 2020

Хотя нет способа создать ограничение уникальности, охватывающее несколько узлов, ниже приведен запрос 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 используется, чтобы избежать создания этого узла, если он уже существует.

0 голосов
/ 08 апреля 2020

Нет, ограничения только на одну метку.

Если вы решили создать новую метку, например, A_B, вы можете утверждать, что ее свойства property1, property2 действуют как ограничение ключа узла , хотя это только корпоративная функция .

...