У меня есть база данных, связанная с полетом, Airport
узлы и Flight
ребра. Каждый Flight
имеет Carrier
свойство. Я хочу посчитать треугольники на графике, которые состоят из одних и тех же Carrier
ребер свойства (Сколько треугольников там, где Flight.Carrier = "AA"
)
Это было бы хорошо и довольно просто:
CALL algo.triangleCount(
'MATCH (a:Airport) RETURN id(a) as id',
'MATCH (a1:Airport)-[f:Flight]->(a2:Airport) WHERE f.Carrier = "AA" RETURN id(a1) as source,id(a2) as target',
{concurrency:4,graph:'cypher'})
YIELD triangleCount
Здесь есть (для меня) сложная часть: я хочу запустить это для 5 разных перевозчиков. По сути, я хочу вызвать счетчик треугольников в UNWIND
или FOREACH
.
Моя первая мысль была
WITH ["AA","NW","UA","US","CO"] AS carriers
UNWIND carriers as carrier
CALL algo.triangleCount(
'MATCH (a:Airport) RETURN id(a) as id',
'MATCH (a1:Airport)-[:Flight{Carrier:carrier}]->(a2:Airport) RETURN id(a1) as source,id(a2) as target',
{concurrency:4,graph:'cypher'})
YIELD triangleCount, averageClusteringCoefficient
RETURN carrier, triangleCount
, но счет треугольника не распознает carrier
, поэтому япоместил UNWIND
внутри второго параметра вызова, который сработал, но вернул ложный результат. При запуске первого кода для каждого из 5 носителей их сумма составляет около 6,5 миль, обновленный второй код ('WITH ["AA","NW","UA","US","CO"] AS carriers UNWIND carriers as carrier MATCH (a1:Airport)-[f:Flight]->(a2:Airport) WHERE f.Carrier = carrier RETURN id(a1) as source,id(a2) as target'
) возвратился чуть более 30 миль, поэтому я предполагаю, что это просто каждый треугольник, в котором все носители ребер являются членамисписок, не обязательно такой же. Как получить цикл, работающий со счетчиком треугольников?