Cypher: как создать связь во время загрузки - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь настроить базу данных своей игровой площадки отсюда. https://github.com/tategallery/collection. Я уже настроил коллекцию художников (простая), и сейчас я борюсь с созданием отношений при загрузке.Можно ли как-то создать ссылку в то же время, когда вы создаете новый узел?

LOAD CSV FROM 'https://raw.githubusercontent.com/tategallery/collection/master/artwork_data.csv' AS line CREATE (:Art {id: line[0], accession_number: line[1], artistId: line[4], title: line[5], medium: line[7], creditLine: line[8], year: line[9], width: line[12], height: line[13], depth: line[14], units: line[15], thumbnailUrl: line[18], url: line[19]}) + somehow relation to an artist (by id)

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Прежде всего, вы должны использовать LOAD CSV WITH HEADERS для загрузки из этого файла, так как он имеет заголовки.Ваш текущий запрос неправильно добавил бы строку заголовка как узел Art.Кроме того, использование имен заголовков значительно упрощает написание кода (и его чтение) и делает его менее подверженным ошибкам.

В следующем запросе также используется MERGE, чтобы гарантировать, что каждый исполнитель (с уникальным идентификатором)) имеет уникальный узел.Он также не сохраняет artistId в узле Art, поскольку отношение CREATED_BY будет указывать на соответствующий Artist.

LOAD CSV WITH HEADERS FROM 'https://raw.githubusercontent.com/tategallery/collection/master/artwork_data.csv' AS r
MERGE (a:Artist {id: r.artistId})
ON CREATE SET a.name = r.artist
CREATE (:Art {
    id: r.id, accession_number: r.accession_number, title: r.title,
    medium: r.medium, creditLine: r.creditLine, year: r.year,
    width: r.width, height: r.height, depth: r.depth, units: r.units,
    thumbnailUrl: r.thumbnailUrl, url: r.url}
  ) - [:CREATED_BY {role: r.artistRole}] -> (a)
0 голосов
/ 11 декабря 2018

Работает ли для вас следующий подход?

LOAD CSV FROM 'https://raw.githubusercontent.com/tategallery/collection/master/artwork_data.csv' AS line
CREATE(art:Art {id:        line[0], accession_number: line[1], artistId: line[4], title: line[5], medium: line[7],
             creditLine:   line[8], year: line[9], width: line[12], height: line[13], depth: line[14], units: line[15],
             thumbnailUrl: line[18], url: line[19]})
WITH art
MATCH (artist:Artist) WHERE id(artist)=50000
MERGE (artist)-[:BELONGS_TO]->(art);

После создания узла Art и привязки его к переменной art вы можете сопоставить artist по идентификатору и ссылке artist с art впоследствии через MERGE.Предложение MERGE гарантирует, что указанный шаблон существует в графе, потому что он либо существует, либо будет создан.

Часть результата:

graph

...