Необходимо объединить несколько json в один json в neo4j с помощью запроса cypher

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

Я хочу объединить все дочерние узлы в один json в 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"
    },
  ]
}

person sharik khan    schedule 27.10.2019    source источник
comment
Не могли бы вы указать на суть ваших данных. Хочу попробовать второй СО с новой коллекцией   -  person Jerome_B    schedule 28.10.2019


Ответы (1)


Этот запрос:

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"
  }
}
person cybersam    schedule 28.10.2019