2015-07-06 3 views
1

Я заполняю Neo4j csv import (py2neo batch import). Я хочу создать отношения, используя существующие узлы, созданные из файлов csv. В моем текущем файле csv столбец «sheet_name» содержит имена существующих файлов csv, а столбец «row_name» показывает узлы, созданные из связанного csv-файла.Neo4j-Cypher создает условные отношения

for row in reader: 
      if row: 
       name = strip(row[0]) 
       created_by = strip(row[1]) 
       barcode = strip(row[3]) 
       sheet_name = strip(row[4]) 
       row_name = strip(row[5]) 

       query = """ 
        merge (document:Document {name:{a}}) 
        merge (sheet_name:Sheet_Name {sheet_name:{b}}) 
        merge (to_deliver:To_Deliver {row_name:{c}}) #This node was created before from other csv file 
        merge (delivered_Delivered {row_name:{c}}) #This node was created before from other csv file 
        CASE WHEN sheet_name.value = 'Pending' THEN MERGE (document)-[:STATUS_IS]->(to_deliver) 
        CASE WHEN sheet_name.value = 'Completed' THEN MERGE (document)-[:STATUS_IS]->(delivered) 
        """ 
       batch.append(query, {"a": name, "b": created_by, "c": barcode, 
            "d": sheet_name, "e": row_name}) 
       i += 1 
       j += 1 
      batch.process() 

Я хочу, чтобы создать отношения, основанные на

--Если значение «SHEET_NAME» в ожидании, то документ имеет статус «to_deliver» - и;

--Ел значение «SHEET_NAME» будет завершен, то статус документа «доставлен» -

«to_deliver» и «поставленные» узлы были созданы до других файлов CSV. Когда я запускаю код, я получаю ошибку, например Invalid input 'A': expected 'r/R' Is CASE..THEN подходит для условных операторов? Спасибо

ответ

1

Выполнение условных операций записи в Cypher немного сложно. Вы можете использовать FOREACH в сочетании с CASE WHEN для итерации по массиву из 1 элемента и выполнить действие, если условие истинно.

Эта концепция очень хорошо объясняется в http://www.markhneedham.com/blog/2014/06/17/neo4j-load-csv-handling-conditionals/.

Смежные вопросы