Как создать узлы с помощью селектора JSON - PullRequest
0 голосов
/ 01 марта 2019

У меня есть набор данных JSON и статьи, в которых они были опубликованы, например:

{"id": "1", "title": "Paper1", "venue": {"raw": "Journal of Cell Biology"}}
{"id": "2", "title": "Paper2", "venue": {"raw": "Nature"}}
{"id": "3", "title": "Paper3", "venue": {"raw": "Journal of Histochemistry and Cytochemistry"}}

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

Код, с которым я работаю, приведен ниже.Я думаю, что мне нужно добавить некоторую логику в часть apoc.load.json, чтобы она соответствовала только данным, где $.venue.raw == 'Nature':

CALL apoc.load.json('file:/example.txt', '$.venue.raw') YIELD value AS q 
CREATE (p:Quanta {id:q.id, title:q.title})
WITH q, p
UNWIND q.venue as venue
MATCH (v:Venue {name: venue.raw})
CREATE (p)-[:PUBLISHED_IN_VENUE]->(v)

Есть ли способ изменить это, чтобы импортировать только соответствующие данные?

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 01 марта 2019

Я предполагаю, что места присутствия присутствуют в вашей базе данных, если она не загружается первой или измените запрос на CREATE / MERGE.

Этот запрос будет фильтроваться на основе предоставленного значения,Позже вы можете изменить это, чтобы принять место в качестве параметра.

CALL apoc.load.json('file:/example.txt') YIELD value AS q 
WHERE q.venue.raw="Nature"
CREATE (p:Quanta {id:q.id, title:q.title})
WITH p,q
MATCH (v:Venue {name: q.venue.raw})
CREATE (p)-[:PUBLISHED_IN_VENUE]->(v)
...