假设我有一个节点的人和电影有[喜欢]的关系。我试图限制喜欢同一部电影的人数而不限制我的结果只包括1部电影。
例如:
MATCH (p:Person)-[LIKES]->(m:Movie)
WHERE
p.age < 30
p.gender = "Male"
RETURN p,m
所以在上面的查询中,我想获得所有结果,但过滤它们,这样只有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;