JSONをパラメータとしてCypherクエリに渡し、UNWIND
を使用してJSONの配列を反復処理することができます。グラフに挿入するサイファークエリにパラメータが次のようになりますよう
{ "items": [{
"question_id": 24620768,
"link": "http://stackoverflow.com/questions/24620768/neo4j-cypher-query-get-last-n-elements",
"title": "Neo4j cypher query: get last N elements",
"answer_count": 1,
"score": 1,
.....
"creation_date": 1404771217,
"body_markdown": "I have a graph....How can I do that?",
"tags": ["neo4j", "cypher"],
"owner": {
"reputation": 815,
"user_id": 1212067,
....
"link": "http://stackoverflow.com/users/1212067/"
},
"answers": [{
"owner": {
"reputation": 488,
"user_id": 737080,
"display_name": "Chris Leishman",
....
},
"answer_id": 24620959,
"share_link": "http://stackoverflow.com/a/24620959",
....
"body_markdown": "The simplest would be to use an ... some discussion on this here:...",
"title": "Neo4j cypher query: get last N elements"
}]
}
は、このJSONオブジェクトを渡す:
例えば
(this blog postから取られた)、のは、あなたのJSONは次のようになりましょう
WITH {json} as data
UNWIND data.items as q
MERGE (question:Question {id:q.question_id}) ON CREATE
SET question.title = q.title, question.share_link = q.share_link, question.favorite_count = q.favorite_count
MERGE (owner:User {id:q.owner.user_id}) ON CREATE SET owner.display_name = q.owner.display_name
MERGE (owner)-[:ASKED]->(question)
FOREACH (tagName IN q.tags | MERGE (tag:Tag {name:tagName}) MERGE (question)-[:TAGGED]->(tag))
FOREACH (a IN q.answers |
MERGE (question)<-[:ANSWERS]-(answer:Answer {id:a.answer_id})
MERGE (answerer:User {id:a.owner.user_id}) ON CREATE SET answerer.display_name = a.owner.display_name
MERGE (answer)<-[:PROVIDED]-(answerer))
hereとhereの例がいくつかあります。
マージ問題についてMERGEはパターン全体を調べ、指定されたパターン全体に基づいて "取得または作成"します。通常、単一のノードプロパティでMERGEを使用して、より大きなパターンの代わりにノードが複製されないようにします。詳細については、this blog postのMERGEセクションを参照してください。
"* JSON構造を反復して作成された連結文字列であることを1つのクエリで知ることができますか?*" - 何を求めているのかわからない:大きな文字列Neo4jで? JSON形式の文字列を複数のノードに解析する必要がありますか?あなたは輸入業者を築こうとしているのですか?明確にするために質問を編集してください。 –
また、別途質問する必要がある追加の質問(マージに関する)があります。 –
編集されていて、ここで答えが簡単であれば、それは私の問題の一部です(1つのクエリですべてを実行しようとすると複数に分けることにしよう) – rambossa