我有论文的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)
是否可以更改此方法,以便仅导入相关数据?
任何帮助将不胜感激!
答案 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)