如何使用JSON选择器创建节点

时间:2019-03-01 04:53:08

标签: json neo4j cypher neo4j-apoc

我有论文的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 :(得分:1)

我认为您的数据库中存在场所,如果不首先加载场所,或者将查询更改为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)