8.5.4 Задание свойств

Узлы и связи являются фундаментальными структурами в графе. Neo4j использует свойства как тех, так и других, позволяя строить намного более богатые модели.

Свойства могут быть выражены в образце с помощью такой структуры отображения: в фигурных скобках произвольное число пар ключ-значение, разделенных запятыми. Например, узел a с двумя свойствами выглядел бы так: (a { name: "Andres", sport:"Brazilian Ju-Jitsu" }).

Связь с ожиданиями могла бы выглядеть так:

(a)-[{blocked:false}]->(b)

Когда свойства появляются в образце, они вносят дополнительное ограничение к форме данных. В случае предложения CREATE свойства будут установлены для вновь создаваемых узлов и отношений. В случае предложения MERGE свойства будут использоваться как дополнительные ограничения на форму, которую должны иметь любые существующие данные (заданные свойства должны точно соответствовать любым существующим данным в графе). Если никаких соответствующих данных не найдено, MERGE ведёт себя как CREATE, и эти свойства будут установлены для вновь создаваемых узлов и связей.

Отметим, что образцы, используемые с CREATE, могут использовать единственный параметр для задания свойств, например: CREATE (node {paramName}). Это не допускается в образцах, используемых в других предложениях, т.к. Cypher необходимо знать имена свойств на этапе компиляции запроса, чтобы сопоставление было эффективным.

8.5.5 Описание связей

Простейший способ описания связи – использование стрелки между двумя узлами, как это делалось в предыдущих примерах. С помощью этой техники вы можете описать, что связь должна существовать и её направление. Если вас не заботит направление связи, наконечник связи можно опустить, например, так:

(a)--(b)

Как и узлам, отношениям также могут быть даны имена. В этом случае используется пара квадратных скобок с идентификатором между ними, которые разбивают стрелку надвое. Например:

(a)-[r]->(b)

Подобно меткам узлов, отношения могут иметь типы. Для описания связи заданного типа можно поступить следующим образом:

(a)-[r:REL_TYPE]->(b)

В отличие от меток, связи могут иметь только один тип. Однако если вы захотите описать некие данные, для которых связь должна иметь какой-нибудь один тип из набора, то они все могут быть перечислены в образце с разделяющим символом «|» как в этом примере:

(a)-[r:TYPE1|TYPE2]->(b)

Отметим, что данная форма образца может быть испольщована только для описания существующих данных (т.е. при использовании образца с MATCH или в качестве выражения). Она не будет работать с CREATE или MERGE, поскольку невозможно создать связь с множественными типами.

Как и для узлов, имя связи всегда может быть опущено, например:

(a)-[:REL_TYPE]->(b)

Предыдущая | Следующая