Как подсчитать метки шифрования с определенным условием?

#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