したがって、次のようなJSONデータがあります。
{"title": "Title1", "authors": [{"name": "Dave Chappelle", "org": "MIT"}], "id": "abc123"}
{"title": "Title2", "authors": [{"name": "Rick Sanchez"}, {"name": "Amy Schumer"], "id": "xyz234"}
org
キーは、論文著者リストの一部にのみ存在します。
存在する場合は、その組織にすでにノードがあるかどうかを確認したいと思います。組織ノードがすでに存在する場合、関係がまだ存在しない場合は、関係を作成したいだけです。組織ノードが存在しない場合は、ノード(o:Organization {name:authors.org})
を作成し、関係WORKS_AT
がまだ存在しない場合は作成者と組織の間に関係を作成します。
私が現在試しているクエリ:
CALL apoc.load.json('file.txt') YIELD value AS q UNWIND q.id AS id UNWIND q.authors as authors
MERGE (a:Author {name:authors.name})
MERGE (o:Organization {name:authors.org}) WHERE authors.org IS NOT NULL
MERGE (i:Paper {id:q.id}) ON CREATE SET i.title=q.title
MERGE (a)-[:WORKS_AT]->(o)
RETURN o.name;
ただし、これによりエラーが発生します。
Invalid input 'H': expected 'i/I' (line 2, column 109 (offset: 256))
サイファーはのWITH
代わりにステートメントを望んでいると思いますが、そのWHERE
理由は完全にはわかりません。どんな提案も大歓迎です!
条件がある場所に移動して、次のWITH
ように追加する必要があります。
CALL apoc.load.json('file.txt') YIELD value AS q UNWIND q.id AS id UNWIND q.authors as authors MERGE (a:Author {name:authors.name}) WITH a, q, authors WHERE authors.org is not null MERGE (o:Organization {name:authors.org}) MERGE (i:Paper {id:q.id}) ON CREATE SET i.title=q.title MERGE (a)-[:WORKS_AT]->(o) RETURN o.name;
エラーが発生する理由は、WHEREの後にMERGEを実行しようとしているためです。これは、構文的に有効ではありません。cypherでのクエリ構造の記述は次のように機能します:(cypher refcardから取得)
[MATCH WHERE] [OPTIONAL MATCH WHERE] [WITH [ORDER BY] [SKIP] [LIMIT]] (CREATE [UNIQUE] | MERGE)* [SET|DELETE|REMOVE|FOREACH]* [RETURN [ORDER BY] [SKIP] [LIMIT]]
WHEREの後、最初にWITHを使用せずにMERGEを使用するオプションはありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加