Я хотел бы создать набор узлов и отношений из документа JSON. Вот пример JSON:
{"records": [{
"type": "bundle",
"id": "bundle--1",
"objects": [
{
"type": "evaluation",
"id": "evaluation--12345",
"name": "Eval 1",
"goals": [
"test"
]
},
{
"type": "subject",
"id": "subject--67890",
"name": "Eval 2",
"goals": [
"execute"
]
},
{
"type": "relationship",
"id": "relationship--45678",
"relationship_type": "participated-in",
"source_ref": "subject--67890",
"target_ref": "evaluation--12345"
}
}]
}
И я хотел бы, чтобы этот JSON был представлен в Neo, как показано ниже:
(:evaluation {properties})<-[:RELATIONSHIP]-(:subject {properties})
В конечном счете, я хотел бы иметь модель, которая представляетоценка, субъект и отношения, генерируемые с помощью нескольких шифровальных вызовов с минимальными внешними манипуляциями, насколько это возможно. Можно ли использовать набор вызовов apoc.create. * Для создания необходимых узлов и связей из этого JSON? Я пробовал что-то похожее на следующее, чтобы загрузить этот JSON, и я могу заставить его создавать узлы произвольного, в данном случае типа «объект».
WITH "file:///C:/path/to/my/sample.json" AS json
CALL apoc.load.json(json, "$.records") YIELD value
UNWIND value.objects as object
MERGE (o:object {id: object.id, type: object.type, name: object.name})
RETURN count(*)
Я пытался изменить выражение JSONPath для фильтрации разных типов записей, но сложно запустить путь Гесснера, например $.records..objects[?(@.type = 'subject')]
, благодаря встроенным кавычкам. Это также привело бы к нескольким прогонам (у меня 15 или около того разных типов) против реального JSON, что может занять очень много времени. Документы LoadJSON имеют простое выражение фильтра, а в блоге 1014 * показано, как анализировать стек-поток, но объекты JSON имеют ключ, который легко отображать в шифре. Есть ли шифр-трюк или APOC, о которых я должен знать, что может помочь мне решить эту проблему?