#neo4j #cypher
#neo4j #шифр
Вопрос:
У меня есть база данных graph с информацией о разных компаниях и их дочерних компаниях. Теперь моя задача — отобразить структуру компании. Этого я добился с помощью d3 и вертикального дерева.
Но дополнительно я должен написать сводную статистику о компании, которая отображается в данный момент. Компании могут быть выбраны из выпадающего списка, который динамически извлекает эти данные с помощью вызова AJAX.
Я должен написать в том же HTML краткое резюме, например :
Общее количество дочерних компаний для CompanyA: 300 Компаний в корпоративных убежищах: 45% Компаний в налоговых убежищах 5%
Моя база данных состоит из двух узлов: Company и Country, и страна имеет метки типа CH и TH.
CREATE (:TH:Country{name:'Nauru', capital:'Yaren', lng:166.920867,lat:-0.5477})
WITH 1 as dummy MATCH (a:Company), (b:Country) WHERE a.name=‘CompanyA ' AND b.name='Netherlands' CREATE (a)-[:IS_REGISTERED]->(b)
Итак, как я могу найти количество дочерних компаний CompanyA, которые зарегистрированы в корпоративных и налоговых убежищах? И как передать эту информацию дальше в html
Я нашел разные запросы cypher для запроса всех меток, а также apocalyptic.stats, но это не позволяет мне фильтровать по материнской компании. Я ценю помощь.
Комментарии:
1. Как ваша модель данных представляет «материнскую компанию» по сравнению с «дочерней» и какие отношения используются для их соединения? Или один и тот же
Company
узел используется для всех «дочерних компаний», и сам факт нахождения в другой стране подразумевает существование отдельной дочерней компании?
Ответ №1:
Шифр хорош тем, что вы пишете запрос почти на естественном языке (приведенный ниже запрос может быть некорректным — не проверял, но идея понятна):
MATCH (motherCompany:Company {name: 'CompanyA'})-[:HAS_SUBSIDIARY]->(childCompany:Company)
WITH motherCompany,
childCompany
MATCH (childCompany)-[:IS_REGISTERED]->(country:Country)
WITH motherCompany,
collect(labels(country)) AS countriesLabels
WITH motherCompany,
countriesLabels,
size([countryLabels IN countriesLabels WHERE 'TH' IN countryLabels ]) AS inTaxHeaven
RETURN motherCompany,
size(countriesLabels) AS total,
inTaxHeaven,
size(countriesLabels) - inTaxHeaven AS inCorporateHeaven