限制关系中公共节点的数量 - Neo4j

时间:2018-04-10 14:02:20

标签: database neo4j cypher

假设我有一个节点的人和电影有[喜欢]的关系。我试图限制喜欢同一部电影的人数而不限制我的结果只包括1部电影。

例如:

    MATCH (p:Person)-[LIKES]->(m:Movie)
    WHERE
    p.age < 30
    p.gender = "Male"
    RETURN p,m

所以在上面的查询中,我想获得所有结果,但过滤它们,这样只有2个人会喜欢同一部电影。

这可能吗?

2 个答案:

答案 0 :(得分:2)

这篇知识库文章介绍了limit match results per row的不同方法。

对于非APOC方法,您可以获得喜欢该电影的人群的片段:

peopleWhoLiked

如果您想要每人单独一行,请在返回前UNWIND apoc.cypher.run()列表。

对于第二种方法,您需要APOC程序。

要使用LIMIT,您需要首先匹配所有电影,然后使用SELECT * FROM Orders WHERE OrderID LIKE '%Dev%' OR OrderID LIKE '%STG%' OR OrderID LIKE '0000%' AND companynumber = 600 AND OrderDate >= DATE_SUB(CURDATE(),INTERVAL 90 DAY); 执行限制匹配:人员节点。

答案 1 :(得分:1)

要获得所有拥有两个(30岁以下男性)喜欢的电影:

MATCH (p:Person)-[:LIKES]->(m:Movie)
WHERE
  p.age < 30 AND
  p.gender = "Male"
WITH m, COLLECT(p) AS likers
WHERE SIZE(likers) = 2
RETURN m, likers;