NEO4J Cypher查找具有多个关系计数的节点

时间:2019-04-12 16:31:04

标签: neo4j cypher

图表

我有一个Neo4J数据库,其中包含大致如下三种图形:

  1. 一只猫,由一个人喂养,住在一个建筑物中。 Graph 1

  2. 一只猫,由住在同一栋楼里的两个人喂养 Same cat, different humans, same building

  3. 一只猫,被多人居住在不同的建筑物中 Same cat, different humans, and different buildings

查询

数据具有许多此类小图。我想选择图表,其中猫被更多的人喂养,而不是人类拥有建筑物。每个图count(cat fed by human) > count(human lives in building)

要选择具有多个人类的猫,我可以奔跑:

MATCH (cat:CAT)-[fed_by:FED_BY]-(:Human)
WITH cat, count(fed_by) as n_feeders
WHERE n_feeders > 1
MATCH g=(cat)-[:FED_BY]-(:Person)-[:LIVES_AT]-(:Building)
RETURN g
LIMIT 10

但是如何添加(:Cat)-[:FED_BY]-(:Human)关系的数量必须大于(:Human)-[:LIVES_IN]-(:Building)关系的数量的条件?

1 个答案:

答案 0 :(得分:1)

通过以下查询,您可以找到所需的猫。

您可以在最后返回这些猫的图表。

MATCH (cat:CAT)-[:FED_BY]-(person:Person)-[:LIVES_AT]-(building:Building)
WITH cat, COUNT(DISTINCT person) as n_feeders, COUNT(DISTINCT building) as n_buildings
WHERE n_feeders > n_buildings
RETURN cat