Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph Neo4j:如何查找连接到具有特定属性的0节点或具有属性集的所有节点的所有节点_Graph_Neo4j_Cypher - Fatal编程技术网

Graph Neo4j:如何查找连接到具有特定属性的0节点或具有属性集的所有节点的所有节点

Graph Neo4j:如何查找连接到具有特定属性的0节点或具有属性集的所有节点的所有节点,graph,neo4j,cypher,Graph,Neo4j,Cypher,假设我有一个有向图,其中包含类型a和B的节点。类型a的节点可以连接到类型a或B的节点,类型B的节点没有传出连接 此外,节点B具有布尔属性。我需要找到以下所有节点: 与节点B没有直接或间接连接 如果节点A连接到至少1个节点B,则仅当所有连接的节点B的属性设置为true时,才应返回该节点 或者换句话说,我需要找到所有A,它们没有连接到属性设置为false的任何B 我试着用query来做: OPTIONAL MATCH (a:A)-[*]->(b:B) WITH a,b, collect(b)

假设我有一个有向图,其中包含类型a和B的节点。类型a的节点可以连接到类型a或B的节点,类型B的节点没有传出连接

此外,节点B具有
布尔属性。我需要找到以下所有节点:
与节点B没有直接或间接连接
如果节点A连接到至少1个节点B,则仅当所有连接的节点B的属性设置为true时,才应返回该节点

或者换句话说,我需要找到所有A,它们没有连接到属性设置为false的任何B

我试着用query来做:

OPTIONAL MATCH (a:A)-[*]->(b:B)
WITH a,b, collect(b) as bc
WITH a,b,COLLECT(bc) AS coll
UNWIND coll as unwinded
WITH a,b,unwinded
WHERE ALL (x IN unwinded WHERE x.prop = true)
return a
但如果它们至少有1个b且
prop=true
,则返回A。我做错了什么

谢谢大家!

这有用吗

MATCH (a:A)
OPTIONAL MATCH (a)-[*]->(b:B {prop: false})
WITH a, b
WHERE b IS NULL
RETURN a
这行吗

MATCH (a:A)
OPTIONAL MATCH (a)-[*]->(b:B {prop: false})
WITH a, b
WHERE b IS NULL
RETURN a

这将返回所有没有连接的
B
节点的
A
节点,并返回一个假
prop

MATCH (a:A)
OPTIONAL MATCH (a)-[*]->(b:B { prop: false })
WITH a, COLLECT(b) AS bs
WHERE SIZE(bs)= 0
RETURN a;
下面显示这个查询

[更新]

正如@InverseFalcon所建议的,上述查询可以大大简化:

MATCH (a:A)
WHERE NOT (a)-[*]->(:B {prop:false})
RETURN a;

这将返回所有没有连接的
B
节点的
A
节点,并返回一个假
prop

MATCH (a:A)
OPTIONAL MATCH (a)-[*]->(b:B { prop: false })
WITH a, COLLECT(b) AS bs
WHERE SIZE(bs)= 0
RETURN a;
下面显示这个查询

[更新]

正如@InverseFalcon所建议的,上述查询可以大大简化:

MATCH (a:A)
WHERE NOT (a)-[*]->(:B {prop:false})
RETURN a;

非常感谢。我想知道我的问题出在哪里。看起来我不完全理解WHERE ALL()是如何工作的注意,应该可以将其缩短一点:
匹配(a:a)WHERE NOT(a)-[*]->(:B{prop:false})返回一个
@InverseFalcon另一个很好的建议。谢谢,谢谢!!!我想知道我的问题出在哪里。看起来我不完全理解WHERE ALL()是如何工作的注意,应该可以将其缩短一点:
匹配(a:a)WHERE NOT(a)-[*]->(:B{prop:false})返回一个
@InverseFalcon另一个很好的建议。谢谢。此查询返回所有
A
节点。
WHERE
子句只过滤第二个
(可选)匹配项
,不删除第一个匹配项找到的
A
节点。再次感谢,cyphersam!;)我认为我刚才添加的
应该可以解决这个问题。这是一个微妙的解决方案,可能比我的更有效。这个查询返回所有
A
节点。
WHERE
子句只过滤第二个
(可选)匹配项
,不删除第一个匹配项找到的
A
节点。再次感谢,cyphersam!;)我认为我刚才添加的
应该可以解决这个问题。这是一个微妙的解决方案,可能比我的更有效。相当整洁。