Как создать узлы с переменными метками в шифре? - PullRequest
0 голосов
/ 08 октября 2018

Я использую плагин JSON APOC для создания узлов из JSON со списками в нем, и я пытаюсь создать узлы, метка которых указана в виде элемента в списке:

{
    "pdf":[
        {
            "docID": "docid1", 
            "docLink": "/examplelink.pdf", 
            "docType": "PDF"
        }
],
    "jpeg":[
        {
            "docID": "docid20", 
            "docLink": "/examplelink20.pdf", 
            "docType": "JPEG"
        }
],
...,}

И я хочучтобы выполнить итерацию по типам документов (pdf, jpeg) и установить метку в качестве свойства docType в списке.Прямо сейчас мне нужно сделать отдельные блоки для каждого списка типов документов (jpeg: [], pdf: []):

WITH "file:////input.json" AS url
CALL apoc.load.json(url) YIELD value
UNWIND value.pdf as doc
MERGE (d:PDF {docID: doc.docID})

Я бы хотел пройтись по спискам типов документов, создавая узел для каждого типа документас меткой в ​​качестве имени списка (pdf) или имени docType узла (PDF).Что-то вроде:

WITH "file:////input.json" AS url
CALL apoc.load.json(url) YIELD value
for each doctypelist in value
for each doc in doctype list
MERGE(d:doc.docType {docID: doc.docID})

или

WITH "file:////input.json" AS url
CALL apoc.load.json(url) YIELD value
for each doctypelist in value
for each doc in doctype list
MERGE(d {docID: doc.docID})
ON CREATE SET d :doc.docType

1 Ответ

0 голосов
/ 08 октября 2018

Cypher в настоящее время не поддерживает это.Чтобы установить метку, вы должны жестко закодировать ее в Cypher.Вы можете сделать фильтры или несколько совпадений, чтобы сделать это утомительно, но если вам не разрешено устанавливать какие-либо плагины к вашей базе данных Neo4j, я бы порекомендовал либо просто поставить индекс на тип, либо использовать узел+ отношение вместо метки.(Существует много допустимых типов документов, поэтому, если вам придется поддерживать их все, чистый Cypher сделает это очень болезненным.)

Однако, используя APOC, существует процедура специально дляэто apoc.create.addLabels

CREATE (:Movie {title: 'A Few Good Men', genre: 'Drama'});
MATCH (n:Movie)
CALL apoc.create.addLabels( id(n), [ n.genre ] ) YIELD node
REMOVE node.genre
RETURN node;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...