Я пытаюсь получить узлы и связанные с ними узлы из базы данных Neo4J, где я также хочу динамически добавлять свойства к возвращаемым узлам. У меня есть следующая модель: Страна содержит города, у меня есть следующие примерные данные:
CREATE (n:Country { identifier: '20f95f76-be40-4cff-98c8-8d045b0552eb', revision: '1', countryCode: 'BE', name: 'Belgium', type:'Country' });
CREATE (n:Country { identifier: '4c78a5b2-7fe6-4b8c-bd35-f2a0aa0ec160', revision: '1', countryCode: 'NL', name: 'Netherlands', type:'Country' });
CREATE (n:Country { identifier: 'aa265519-4765-477d-99f9-c65bf0c202d8', revision: '1', countryCode: 'DE', name: 'Germany', type:'Country' });
CREATE (n:City { identifier: '8147f29c-39f2-4123-9b73-298de2b871f9', revision: '1', name: 'Antwerp', type:'City' })
CREATE (n:City { identifier: '8058bfc4-9fd3-4df7-8035-0adb53da713c', revision: '1', name: 'Brussels', type:'City' })
MATCH (country:Country), (city:City)
WHERE country.identifier = '20f95f76-be40-4cff-98c8-8d045b0552eb' AND city.identifier = '8147f29c-39f2-4123-9b73-298de2b871f9'
CREATE (country)-[:CONTAINS]->(city)
MATCH (country:Country), (city:City)
WHERE country.identifier = '20f95f76-be40-4cff-98c8-8d045b0552eb' AND city.identifier = '8058bfc4-9fd3-4df7-8035-0adb53da713c'
CREATE (country)-[:CONTAINS]->(city)
То, что я хотел бы получить из базы данных, это узлы страны, а также узлы города, но я необходимо добавить свойство "city" в возвращаемый узел Country, который содержит массив идентификаторов содержащегося города. И вместо сохранения свойства _type я хотел бы добавить его динамически на основе метки узла.
В настоящее время я использую следующий запрос:
MATCH (country:Country)
OPTIONAL MATCH (country)-[:CONTAINS]-(city:City)
RETURN country {.*, city: collect( distinct city.identifier )}, city {.*, container: country.identifier}
Я получаю следующее результаты:
[
{
"country": {
"city": [
"8058bfc4-9fd3-4df7-8035-0adb53da713c"
],
"name": "Belgium",
"identifier": "20f95f76-be40-4cff-98c8-8d045b0552eb",
"revision": "1",
"countryCode": "BE",
"type": "Country"
},
"city": {
"container": "20f95f76-be40-4cff-98c8-8d045b0552eb",
"identifier": "8058bfc4-9fd3-4df7-8035-0adb53da713c",
"name": "Brussels",
"revision": "1",
"type": "City"
}
},
{
"country": {
"city": [
"8147f29c-39f2-4123-9b73-298de2b871f9"
],
"name": "Belgium",
"identifier": "20f95f76-be40-4cff-98c8-8d045b0552eb",
"revision": "1",
"countryCode": "BE",
"type": "Country"
},
"city": {
"container": "20f95f76-be40-4cff-98c8-8d045b0552eb",
"identifier": "8147f29c-39f2-4123-9b73-298de2b871f9",
"name": "Antwerp",
"revision": "1",
"type": "City"
}
},
{
"country": {
"city": [],
"name": "Netherlands",
"identifier": "4c78a5b2-7fe6-4b8c-bd35-f2a0aa0ec160",
"revision": "1",
"countryCode": "NL",
"type": "Country"
},
"city": null
},
{
"country": {
"city": [],
"name": "Germany",
"identifier": "aa265519-4765-477d-99f9-c65bf0c202d8",
"revision": "1",
"countryCode": "DE",
"type": "Country"
},
"city": null
}
]
Как вы можете видеть, узел Бельгии возвращается дважды (я ожидал, что он будет возвращен только один раз), каждый раз, когда в содержании City встречается совпадение. Я хочу вернуть узлы Country, даже если они не содержат городов.
Была бы признательна за помощь