Neo4J 查询以获得前 N 个结果

Neo4J query to get top N results

我有一个名为 Airports 的节点,其中包含有关机场的数据,还有一个名为 Routes 的节点,其中有大量往返机场的航班 (SourceID, DestinationID)。

该节点上的数据如下所示:

Airline AirlineID Source SourceID Destination DestinationID Codeshare Stops Equipment
2B 410 AER 2965 KZN 2990 0 CR2
2B 410 ASF 2966 KZN 2990 0 CR2
2B 410 ASF 2966 MRV 2962 0 CR2
2B 410 CEK 2968 KZN 2990 0 CR2

我已经创建了关系类型 (1) SOURCE & (2) DESTINATION 显示到其他机场的方向

  1. SourceID -> DestinationID
  2. DestinationID -> SourceID

我需要对 return 航班总数(进港/出港)最多的前 5 个机场进行查询。

当运行以下代码结果正确时:

MATCH (f)-[:SOURCE]->(a:Airport) 
WITH a, COUNT(*) as Count 
RETURN a.name AS AirportName, Count AS TotalFlights 
ORDER BY Count DESC LIMIT 5;

如果我尝试运行以下以获得总航班数,结果不是。

MATCH (f)-[:SOURCE]->(a:Airport)<-[:DESTINATION]-(f)
WITH a, COUNT(*) as Count 
RETURN a.name AS AirportName, Count AS TotalFlights 
ORDER BY Count DESC LIMIT 5;

谁能帮帮我?我是 NEO4J 的新手。

也许你可以只统计关系(即统计机场节点的度数):

MATCH (a:Airport)
RETURN a.name as AirportName, size( (a)-[:SOURCE|DESTINATION]-() ) as TotalFlights 
ORDER BY TotalFlights DESC LIMIT 5;

还有一个获取节点度数的apoc函数

您的查询 returns 没有结果,因为您只为单个 route 节点分配了相同的变量 f 两次。因此,此查询将仅计算与同一机场有 SOURCEDESTINATION 关系的路线(通常没有多大意义)。

MATCH (f)-[:SOURCE]->(a:Airport)<-[:DESTINATION]-(f)
WITH a, COUNT(*) as Count 
RETURN a.name AS AirportName, Count AS TotalFlights 
ORDER BY Count DESC LIMIT 5;

按照其他人的建议,简单地计算关系(获得节点度)应该就足够了:

MATCH (a:Airport)
WITH a, SIZE((a)<-[:SOURCE|DESTINATION]-()) as numOfFlights 
RETURN a.name as airportName, numOfFlights
ORDER BY numOfFlights DESC
LIMIT 5;