Neo4j 在cypher中将一个节点与子图的所有节点匹配

Neo4j 在cypher中将一个节点与子图的所有节点匹配,neo4j,cypher,nodes,matching,subgraph,Neo4j,Cypher,Nodes,Matching,Subgraph,我对Neo4j很感兴趣,我需要知道如何找到与给定子图的每个节点都有关系的节点 让我们用一个例子来解释这一点: (我的数据库中大约有15000个节点) 现在,给定子图(c1:Thing),(c2:Thing),…(cn:Thing) 我想知道所有不是(c1),…,(cn)中任何一个的节点,但它们与(c1),…,(cn)的每个节点都有关系 换句话说,我会找到Cj,其中存在关系: (Cj)-[r1]-(c1) . . . (Cj)-[rn]-(cn) j不在{1,…,n}中 所以基本上我想匹配像c6

我对Neo4j很感兴趣,我需要知道如何找到与给定子图的每个节点都有关系的节点

让我们用一个例子来解释这一点:

(我的数据库中大约有15000个节点)

现在,给定子图(c1:Thing),(c2:Thing),…(cn:Thing) 我想知道所有不是(c1),…,(cn)中任何一个的节点,但它们与(c1),…,(cn)的每个节点都有关系

换句话说,我会找到Cj,其中存在关系: (Cj)-[r1]-(c1) . . . (Cj)-[rn]-(cn)

j不在{1,…,n}中

所以基本上我想匹配像c6这样的节点,那些与子图的每个节点相连的节点(红色节点)

注意:给定的子图可以有任意数量的节点(n是可变的)

我的第一个想法是:

匹配(c1:对象)-[r1]-(建议:对象),[c2:对象)-[r2]-(建议:对象),(cn:Thing)-(建议:Thing) 式中,c1.id=1,且。。。。。和cn.id=n而不是(在[1,…,n]中建议使用.id) 返回c1,r1,…,cn,rn,建议

但当我们有一个“n”时,这真的很糟糕,这是一个大数字

你能帮我吗


谢谢,祝你今天愉快

下面是一种解决问题的方法,同时对数据建模进行一些假设

类似于此的查询可能会得到您想要的:

MATCH p=(n:Thing)-[:RELATED_TO]->(n2), (suggest:Thing)
WHERE n <> n2 AND NOT suggest IN nodes(p) AND ALL (x IN nodes(p) WHERE (suggest)-[:RELATED_TO]->(x))
RETURN suggest
MATCH p=(n:Thing)-[:RELATED\u TO]->(n2),(建议:Thing)
其中n n2和NOT suggest IN nodes(p)和ALL(x IN nodes(p)其中(suggest)-[:RELATED_TO]->(x))
退货建议
现在,假设感兴趣的子图(即c1到cn)通过相同的关系进行关联。当然,您可以根据自己的喜好定义路径/子图,更好的做法是了解起点和终点,但您可能手头上有这些信息,也可能没有这些信息。此外,如果您正在处理多长度路径/子图,请小心限制它们。同样,如果您正在考虑多长度路径/子图,您将得到的结果可能不是唯一的

另一个假设是(建议)与子图的每个节点具有相同的关系,并且与子图中的关系类型相同。根据需要调整此选项

这就是说,这应该足以让你开始和/或朝着正确的方向思考。和往常一样,如何对数据建模与如何编写查询同样重要,如果不是更重要的话