Neo4j: цикл по карте, полученной из apoc.load.json в Cypher - PullRequest
0 голосов
/ 17 мая 2019

Я хочу создать график Neo4j из данных, считанных из файла json, но я не могу циклически обработать данные, полученные в результате.

Я попытался продолжить, как в этом примере: https://neo4j.com/blog/cypher-load-json-from-url/

Однако структура моего результата apoc.load.json не выглядит аналогичной. Я пытаюсь понять, что я могу использовать вместо:

UNWIND data.items as q

из примера, как по мне, это не работает.

Чтобы понять структуру моего вывода, я выполнил это из браузера Neo4j:

CALL apoc.load.json('mytest.json') YIELD value
RETURN keys(value)

с результатом:

["favorites", "sentiment", "content-length", "keywords", "published-at", "reach", "title", "facts", "posts", "normalized-flesch-score", "ext-url", "shares", "last-modified", "score", "xscore", "companies", "quote", "provider", "content-type", "created-at", "categories", "id", "lang", "value", "keyphrases", "annotation", "duplicates", "karma", "topics", "subjects", "al", "possibly-sensitive", "inserted-at", "tags", "replies", "entities", "meta", "domain", "flesch-score", "locations", "parent-id", "relations", "adult", "non-media-entities", "user", "tr", "status"]
["favorites", "sentiment", "content-length", "keywords", "published-at", "reach", "title", "facts", "posts", "normalized-flesch-score", "ext-url", "shares", "last-modified", "score", "xscore", "companies", "quote", "provider", "content-type", "created-at", "categories", "id", "lang", "value", "keyphrases", "annotation", "duplicates", "karma", "topics", "subjects", "al", "possibly-sensitive", "inserted-at", "tags", "replies", "entities", "meta", "domain", "flesch-score", "locations", "parent-id", "relations", "adult", "non-media-entities", "user", "tr", "status"]
...

Однако, когда я пытаюсь перебрать объекты в моем выводе и вернуть один ключ, как это:

CALL apoc.load.json('mytest.json') YIELD value
UNWIND value AS v
RETURN v.favorites

Я получаю ошибку:

Neo.ClientError.Statement.SyntaxError: Type mismatch: expected List<T> but was Map (line 2, column 8 (offset: 62))

     "UNWIND value AS v"
             ^

С другой стороны, если я зациклюсь, например, на value.title, а не на value, я получу разумные значения.

Затем я посмотрел примеры циклического перемещения по карте с помощью шифра, но карты показали, что все они имеют разную структуру, и решения не были применимы (по крайней мере, на мой взгляд начинающих) к моей проблеме.

Было бы замечательно, если бы кто-нибудь мог дать мне какие-то сведения о том, как зациклить объект, который у меня есть. Большое спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

Каждое value, возвращаемое apoc.load.json, является картой , а не списком.

Чтобы получить значение любого свойства (скажем, foo) из карты,просто используйте value.foo (или value['foo']).Например:

CALL apoc.load.json('mytest.json') YIELD value
RETURN value.foo
0 голосов
/ 17 мая 2019

Вам не нужно использовать unwind здесь.Вы можете просто вернуть избранное как:

CALL apoc.load.json('mytest.json') YIELD value
RETURN value.favorites
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...