查找与节点列表有关系的节点

时间:2016-07-03 01:54:03

标签: javascript node.js neo4j cypher

我们说我有节点try...catch和节点USERs。它们可以通过关系CARs连接。

我想通过LIKE的列表清单返回CARs的所有LIKEd

目前我有这个问题:

USERs

然而,返回Sara,John或两者都喜欢的所有汽车。我想把它限制在只有两个人喜欢的汽车上。

更新 这是我到目前为止所提出的,但这种方法并不允许我使用一系列名称作为输入,我可以使用它,但是很想找到一个可以采取的解决方案数组作为一个参数,任何帮助非常感谢。

MATCH (c:CAR)<-[r:LIKES]-(u:User) 
WHERE u.username  IN ['Sara', 'John'] RETURN e, u

2 个答案:

答案 0 :(得分:0)

我认为此查询将满足您的需求:

def[0]

答案 1 :(得分:0)

有点棘手。我发现最简单的方法是利用这个:

  

ALL(x IN y EXERE EXISTS(relationship))

假设有Sara,John和Bill的图表,其中三个都像野马汽车,而John和Bill就像Pintos,这个代码将返回Mustang汽车,这是列表中所有用户喜欢的唯一汽车:

WITH ['Sara', 'John', 'Bill'] AS usernames 
MATCH (c:CAR) 
WHERE ALL(username IN usernames WHERE EXISTS((:User{name:username})-[:LIKES]->(c))) 
RETURN c

编辑: 或者,您可以尝试这一点,首先匹配列表中的用户,匹配这些用户喜欢的汽车,然后将其缩小到只有所有这些用户喜欢的汽车。

MATCH (u:User) WHERE u.name IN ['Sara', 'John', 'Bill'] 
WITH u, COLLECT(u) AS users
MATCH (u)-[:LIKES]->(c:CAR)
WHERE ALL(user IN users WHERE EXISTS((user)-[:LIKES]->(c))) 
RETURN c

您需要对实际数据集进行分析,以了解哪种方法效果最佳。