Как создавать узлы с помощью селектора JSON

У меня есть набор данных 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)

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

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


person Tim Holdsworth    schedule 01.03.2019    source источник
comment
Вы загрузили места в базе данных?   -  person Rajendra Kadam    schedule 01.03.2019
comment
Да, места уже есть в базе   -  person Tim Holdsworth    schedule 02.03.2019


Ответы (1)


Я предполагаю, что места проведения мероприятий присутствуют в вашей базе данных, если она не загрузит их сначала или не изменит запрос на СОЗДАНИЕ/ОБЪЕДИНЕНИЕ.

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

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)
person Rajendra Kadam    schedule 01.03.2019
comment
Это по-прежнему загружает все данные в Cypher, а не только соответствующие строки, верно? Если это так, то это будет медленнее, чем выбор JSON с помощью метода apoc.load.json, который я считаю - person Tim Holdsworth; 02.03.2019
comment
Он загрузит все данные в память и создаст узлы, только если условие истинно. Узлы не создаются, если место проведения не Природа. В настоящее время невозможно фильтровать данные, как вы просите. Возможно, вам придется фильтровать это снаружи. - person Rajendra Kadam; 02.03.2019