如何使用neo4j的Cypher查询语言匹配具有n个以上关系的节点?



每轮游戏中的一个节点都与答案节点相连。

(圆)& lt; - [: IN_ROUND](回答):

预计每轮有5个或更少的答案与它相关,我怀疑我的数据库中存在比这更多的节点,我如何查询此信息?返回超过5个<-[:IN_ROUND]-关系的所有:Round节点?

您可以使用WITH子句计算连接节点的数量,然后根据该计数进行筛选。

如果您希望将传入连接指定为Round

MATCH (rnd:Round)<-[:IN_ROUND]-(a)
WITH rnd, count(a) as incomingNodes
WHERE incomingNodes>5
RETRUN rnd

如果你想同时计算传入和传出的连接:

MATCH (rnd:Round)-[:IN_ROUND]-(a)
WITH rnd, count(a) as connectedNodes
WHERE connectedNodes>5
RETRUN rnd

你可以这样写:

MATCH (n:Round)<-[:IN_ROUND]-(:Answer)
WHERE size((n)<-[:IN_ROUND]-(:Answer)) > 5
RETURN distinct(n)

您可以看到它在这个示例数据上起作用:

MERGE (a:Round{key: 1})
MERGE (b:Round{key: 2})
MERGE (c:Answer{key: 3})
MERGE (d:Answer{key: 4})
MERGE (e:Answer{key: 5})
MERGE (f:Answer{key: 6})
MERGE (g:Answer{key: 7})
MERGE (h:Answer{key: 8})
MERGE (i:Answer{key: 9})
MERGE (c)-[:IN_ROUND{key:1}]-(a)
MERGE (d)-[:IN_ROUND{key:1}]-(a)
MERGE (e)-[:IN_ROUND{key:1}]-(a)
MERGE (f)-[:IN_ROUND{key:1}]-(a)
MERGE (g)-[:IN_ROUND{key:1}]-(a)
MERGE (h)-[:IN_ROUND{key:1}]-(a)
MERGE (i)-[:IN_ROUND{key:1}]-(b)
MERGE (c)-[:IN_ROUND{key:1}]-(b)
MERGE (e)-[:IN_ROUND{key:1}]-(b)
MERGE (f)-[:IN_ROUND{key:1}]-(b)
MERGE (g)-[:IN_ROUND{key:1}]-(b)

返回:

╒═════════╕
│"n"      │
╞═════════╡
│{"key":1}│
└─────────┘

最新更新