Необходимо объединить несколько JSON в один JSON в Neo4j с помощью запроса шифра - PullRequest
0 голосов
/ 27 октября 2019

Я хочу объединить несколько JSON в один JSON в Cypher. LocalizationKey - родительский узел, а все языки - его дочерний узел.

Я хочу объединить все дочерние узлы в один json в cypher.

У меня есть запрос на возврат cypher для получения данных, как ожидается ниже

MATCH (key:Key)-[*1]->(languages)
WITH key, collect(languages) as Languages
return apoc.map.setKey( key, 'Languages', Languages ) as LocalizationValue

Ожидаемый результат:

{
  "localizationKey": "P2P_CM_BasicDetails",
  "Languages": [
    {
      "en_US": "Basic details",
      "cz_CZ": "Základní údaje",
      "de_DE": "Grundlegende Details",
      "en_AU": "Basic Details"
    }
  ]
}

В настоящее время получается результат как:

{
  "localizationKey": "P2P_CM_BasicDetails",
  "Languages": [
    {
      "en_US": "Basic details"
    },
    {
      "cz_CZ": "Základní údaje"
    },
    {
      "de_DE": "Grundlegende Details"
    },
    {
      "en_AU": "Basic Details"
    },
  ]
}

1 Ответ

0 голосов
/ 28 октября 2019

Этот запрос:

MATCH (key:Key)-->(lang)
WITH key, REDUCE(s={}, x IN COLLECT(lang) | apoc.map.merge(s, x)) AS Languages
RETURN apoc.map.merge(key, {Languages: Languages}) AS LocalizationValue

использует apoc.map.merge для объединения карт и возвращает результат в следующем формате (что, я думаю, вы на самом деле хотите, так как он делаетLanguages не имеет смысла быть списком, содержащим только один объект):

{
  "localizationKey": "P2P_CM_BasicDetails",
  "Languages": {
    "en_AU": "Basic Details",
    "cz_CZ": "Základní údaje",
    "en_US": "Basic details",
    "de_DE": "Grundlegende Details"
  }
}
...