Как скопировать подграф в Neo4j с помощью Cypher - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь смоделировать файловую систему, используя Neo4j, Cypher и Python (Py2Neo).

Я создал модель данных, как показано на следующем снимке экрана.

Type = 0означает папку и тип = 1 означает файл.

.enter image description here.

Я реализую такие функции, как Копирование, Перемещение и т. Д. Для файлов / папок.

Функции перемещения выглядят просто, я могу создать новую связь и удалитьСтарый.Но при копировании файлов / папок необходимо скопировать подграф.

Как скопировать подграф?

Я создаюмодуль python, поэтому пытаюсь избежать апока.

1 Ответ

0 голосов
/ 26 февраля 2019

Даже если вы пытаетесь избежать APOC, эта функция уже реализована в самом последнем выпуске: apoc.refactor.cloneSubgraph ()

Для подхода без APOCвам нужно выполнить следующее:

  1. СОГЛАСОВАТЬ с различными узлами и связями, которые составляют подграф, который вы хотите клонировать.Наличие отдельного списка для каждого облегчит эту обработку.

  2. Клонируйте узлы и получите способ отобразить исходный узел на клонированный узел.

  3. Обработка отношений, поиск начального и конечного узлов и последующее сопоставление с клонированными узлами, затем создание того же типа отношения с использованием клонированных узлов для начального и конечного узлов отношения, затем копирование свойств изоригинальные отношения.Таким образом, вы не будете иметь никаких связей с оригиналами, а только с клонами.

  4. Определите, какие узлы вы хотите повторно привязать (вы, вероятно, не хотите клонировать оригинал), идля любых отношений, которые идут в / из этого узла, создайте его (через шаг 3) для узла, который вы хотите использовать в качестве нового якоря (например, новый: File, который должен быть родителем клонированного дерева каталогов).

Все это сложно сделать в Cypher (в частности, шаги 3 и 4), поэтому причина всего этого заключена в apoc.refactor.cloneSubgraph().

...