Создание иерархической структуры с помощью Cypher - PullRequest
0 голосов
/ 28 апреля 2018

Я новичок в Neo4j, и я застрял на одной простой проблеме целый день. Это должно быть очень просто исправить, но я просто не могу понять это правильно! Я пытаюсь смоделировать иерархическую структуру компании (от генерального директора до стажера). У меня есть файл cvs с номерами Employee_ID и названиями их должностей. В этом же файле у меня есть еще один столбец с идентификационными номерами менеджеров сотрудников. Таким образом, в каждой строке у меня есть 3 ячейки: идентификатор сотрудника, должность, идентификатор руководителя сотрудника, и у меня есть 30 строк (на данный момент).

(Например: рядом с идентификатором сотрудника Джона есть идентификатор сотрудника Сэма, потому что Сэм является менеджером Джона. Сэм также отображается в столбце Сотрудника, а рядом с его идентификатором находится идентификатор Марка, поскольку Марк является менеджером Сэма ... и итак)

Кажется, что это очень похоже на классический пример Actor- [ACTED_IN] -> Movie, но в этом случае у меня нет 30 актерских узлов и 30 киноэлементов, и я не уверен, как построить 30 отношений между теми же 30 узлов.

Каждый раз, когда я пытаюсь создать отношение WORKS_UNDER, я заканчиваю тем, что создаю новые узлы, и я не могу заставить Neo4j понять, что узлы на правой стороне отношения уже находятся в графе.

Я уверен, что это простая проблема, но, как я уже сказал, я новичок в Neo4j, и я действительно могу воспользоваться помощью!

ОБНОВЛЕНИЕ: мне удалось заставить его работать, добавив идентификаторы менеджеров как свойство в узлах Сотрудников.

ЗАГРУЗИТЬ CSV С ЗАГОЛОВКАМИ ИЗ "file: ///Personnel.csv" AS row FIELDTERMINATOR ';'

MERGE (person: Person {employee_ID: row.ID, job_title: row.Jobtitle, manager_ID: row.ManagerID})

С *

МАТЧ (p1: Person)

МАТЧ (p2: Person)

ГДЕ p2.employee_ID = p1.manager_ID

MERGE (p1) - [r: WORKS_UNDER] - (p2)

Я уверен, что должен быть способ сделать это, который не требует, чтобы я добавил идентификаторы менеджеров как свойство, но я не могу понять это: (

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Если вы получаете новые неожиданные узлы, то, скорее всего, вы используете MERGE для всего шаблона вместо того, чтобы сначала объединять каждый узел, а только затем объединять отношения между ними.

MERGE похож на МАТЧ, за которым следует СОЗДАТЬ (если матч не удался). Любые элементы шаблона, которые еще не связаны, будут созданы.

Вот статья базы знаний о том, как лучше понять, как работает MERGE .

0 голосов
/ 28 апреля 2018

Убедитесь, что вы создали ограничение для вашего бизнес-идентификатора

 CREATE CONSTRAINT ON (n:<LabelName>) ASSERT n.<propertyKey> IS UNIQUE
...