我目前有这个查询:
START n=node(*)
MATCH (p:Person)-[:is_member]->(g:Group)
WHERE g.name ='FooManGroup'
RETURN p, count(p)
LIMIT 5
假设FooManGroup
中有42个人,我想返回其中5个人,计数为42个。
这可以在一个查询中完成吗?
现在运行它会返回5行,这很好,但计数为104,这是我的数据库中任何类型的节点总数。
有什么建议吗?
答案 0 :(得分:2)
您可以使用WITH
子句对人员进行计数,然后使用相同的MATCH
子句对每个人进行匹配。请注意,您需要在START
个节点上p
,而不仅仅是与图中任何节点匹配的n
{/ p>}
MATCH (p:Person )-[:is_member]->(g:Group)
WHERE g.name ='FooManGroup'
WITH count(p) as personsInGroup
MATCH (p:Person)-[:is_member]->(g:Group)
WHERE g.name ='FooManGroup'
RETURN p, personsInGroup
LIMIT 5
它可能不是最佳或最优雅的方式,但它有效。如果您使用cypher 2.0,它可能会更紧凑:
MATCH (p:Person)-[:is_member]->(g:Group {name: 'FooManGroup'})
WITH count(p) as personsInGroup
MATCH (p:Person)-[:is_member]->(g:Group {name: 'FooManGroup'})
RETURN p, personsInGroup
LIMIT 5
关系类型在cypher中总是大写的,因此:is_member
应该是:IS_MEMBER
,我认为它更具可读性:
MATCH (p:Person)-[:IS_MEMBER]->(g:Group {name: 'FooManGroup'})
WITH count(p) as personsInGroup
MATCH (p:Person)-[:IS_MEMBER]->(g:Group {name: 'FooManGroup'})
RETURN p, personsInGroup
LIMIT 5
答案 1 :(得分:0)
试试这个:
MATCH (p:Person)-[:is_member]->(g:Group)
WHERE g.name ='FooManGroup'
RETURN count(p), collect(p)[0..5]