Я загружаю основной файл CSV в базу данных Neo4j, которая имеет два столбца - «имя» и «свойство». Столбец name всегда имеет значение, а столбец «property» может иметь значение или пробел. Я хотел бы, чтобы значения были связаны с отношением "property1".

Я использую этот код:

LOAD CSV WITH HEADERS FROM 'file:///fileName.csv' AS line
MERGE (Test_Document:A {name: line.name})
WITH line, Test_Document 
FOREACH (x IN CASE WHEN line.property IS NULL THEN [] ELSE [1] END |
  MERGE (Properties:B {property1: line.property})
WITH Test_Document, Properties
FOREACH (y IN CASE WHEN Properties IS NULL THEN [] ELSE [1] END |
  MERGE (Test_Document)-[:property1]->(Properties))

Я получаю сообщение об ошибке:

Unexpected end of input: expected whitespace, LOAD CSV, START, MATCH, UNWIND, MERGE, CREATE, SET, DELETE, REMOVE, FOREACH, WITH, CALL, RETURN or ')' (line 8, column 54 (offset: 423))
"  MERGE (Test_Document)-[:property1]->(Properties))"

Любая помощь была бы признательна.

2
Honey_Badger 5 Апр 2017 в 18:17

2 ответа

Лучший ответ

Есть две проблемы с вашим запросом:

  1. Отсутствует закрывающая скобка в строке 5
  2. Properties не входит в область действия второго FOREACH, поскольку он объявлен в предыдущем FOREACH (псевдонимы, объявленные в FOREACH, доступны только в пределах этого FOREACH оговорка)

Попробуй это:

LOAD CSV WITH HEADERS FROM 'file:///fileName.csv' AS line
MERGE (Test_Document:A {name: line.name})
WITH line, Test_Document 
FOREACH (x IN CASE WHEN line.property IS NULL THEN [] ELSE [1] END |
  MERGE (Properties:B {property1: line.property})
  MERGE (Test_Document)-[:property1]->(Properties)
)
4
William Lyon 5 Апр 2017 в 16:34

Другой подход будет использовать WHERE для создания отношений только тогда, когда нет пропущенных значений, как:

LOAD CSV WITH HEADERS FROM 'file:///fileName.csv' AS line
WITH line, line.name AS Name, line.property AS Property
MERGE (Test_Document:A {name: Name})
WITH Property
WHERE Property <> ""
MERGE (Properties:B {property1: Property})
MERGE (Test_Document)-[:property1]->(Properties)

Это создает ссылку и узел B только тогда, когда поле свойства не является нулевым.

3
Fabio Lamanna 6 Апр 2017 в 07:36