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
Neo4j 密码不在查询中,具有可选匹配项_Neo4j_Cypher_Graph Databases - Fatal编程技术网

Neo4j 密码不在查询中,具有可选匹配项

Neo4j 密码不在查询中,具有可选匹配项,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,不相关-跳到重要编辑。 我有以下疑问: MATCH (n) WHERE (n:person) AND n.id in ['af97ab48544b'] // id is our system identifier OPTIONAL MATCH (n)-[r:friend|connected|owner]-(m) WHERE (m:person OR m:dog OR m:cat) RETURN n,r,m 此查询返回与特定人有关系的所有人、狗和猫。我想将其转换为接收此查询结果中未包含的所有节点

不相关-跳到重要编辑。

我有以下疑问:

MATCH (n)
WHERE (n:person) AND n.id in ['af97ab48544b'] // id is our system identifier
OPTIONAL MATCH (n)-[r:friend|connected|owner]-(m)
WHERE (m:person OR m:dog OR m:cat)
RETURN n,r,m
此查询返回与特定人有关系的所有人、狗和猫。我想将其转换为接收此查询结果中未包含的所有节点和关系

如果它是SQL,那么它就是SQL

select * from graph where id NOT IN (my_query)
我认为可选匹配是有问题的部分。我该怎么做? 有什么建议吗

谢谢

--重要编辑--

嘿,伙计们,很抱歉改变了我的问题,但我的要求已经改变了。我需要通过ID连接和断开整个图(所有节点和关系),除了特定节点。下面的查询正在运行,但仅针对单个id,如果有更多id,则无法运行

MATCH (n) WHERE (n:person)
OPTIONAL MATCH (n)-[r:friend|connected|owner]-(m) WHERE (m:person OR m:dog OR m:cat)
WITH n,r,m
MATCH (excludeNode) WHERE excludeNode.id IN ['af97ab48544b']
WITH n,r,m,excludeNode WHERE NOT n.id = excludeNode.id AND (NOT m.id = excludeNode.id OR m is null)
RETURN n,m,r
或者,我尝试了更简单的查询:

MATCH (n) WHERE (n:person) AND NOT n.id IN ['af97ab48544b'] return n
但是这个函数不会返回关系(记住,我还需要断开连接的节点)


如何获取排除特定节点的整个图形?这包括节点和关系、连接的节点和断开连接的节点。

您必须切换查询的“透视图”。。。首先在每个节点上循环,然后修剪与您的人连接的节点

MATCH (bad:person) WHERE bad.id IN ['af97ab48544b']
WITH COLLECT(bad) AS bads
MATCH path = (n:person) - [r:friend|:connected|:owner] -> (m)
WHERE n._id = '' AND (m:person OR m:cat OR m:dog) AND NOT ANY(bad IN bads WHERE bad IN NODES(path))
RETURN path

也就是说,这是一个更适合SQL而不是图形的问题。任何时候,如果您必须使用标签在每个节点上循环,那么您处于关系区域,图形的效率就会降低。

您必须切换查询的“透视图”。。。首先在每个节点上循环,然后修剪与您的人连接的节点

MATCH (bad:person) WHERE bad.id IN ['af97ab48544b']
WITH COLLECT(bad) AS bads
MATCH path = (n:person) - [r:friend|:connected|:owner] -> (m)
WHERE n._id = '' AND (m:person OR m:cat OR m:dog) AND NOT ANY(bad IN bads WHERE bad IN NODES(path))
RETURN path
也就是说,这是一个更适合SQL而不是图形的问题。每当您必须使用标签循环每个节点时,您处于关系区域,图形的效率就会降低。

尝试以下方法:

匹配(n),其中非n.id='id to remove'可选匹配(n)-[r]-(m) 其中,['id to remove']中不是n.id,而['id to remove']中不是m.id 返回n,r,m

试试这个:

匹配(n),其中非n.id='id to remove'可选匹配(n)-[r]-(m) 其中,['id to remove']中不是n.id,而['id to remove']中不是m.id 返回n,r,m


感谢您的快速回答,但是不需要的节点仍然会返回,我稍微编辑了一下以保持整洁,但是您指的是哪些不需要的节点?它返回什么不应该返回?它本身返回“坏”节点请参见上面的更新。将
*0..1
添加到关系中以排除坏节点。感谢您的快速回答,但是不需要的节点仍然会返回,我稍微编辑了一下以保持整洁,但是您指的是哪些不需要的节点?它返回什么不应该返回?它本身返回“坏”节点请参见上面的更新。将
*0..1
添加到关系中以排除坏节点。为了澄清,您正在查找与您的:person连接的所有节点,这些节点不是:persons/:dogs/:cats连接的:friend/:connected/:owner关系?或者,您是否正在尝试查找所有与这些节点不存在这些关系的人?或者,您是否正在尝试查找整个图形中不包含查询中的任何:person节点(和连接的节点)的所有节点?所需输出的示例是什么?根据您的SQL语句和问题描述,我推断您希望找到所有未连接到具有特定id的
人员的
人员
?请阅读我的上一次编辑。很遗憾,我的要求已更改。为了澄清,您正在查找连接到您的:person的所有节点,这些节点不是:persons/:dogs/:cats通过:friend/:connected/:owner关系连接的?或者,您是否正在尝试查找所有与这些节点不存在这些关系的人?或者,您是否正在尝试查找整个图形中不包含查询中的任何:person节点(和连接的节点)的所有节点?所需输出的示例是什么?根据您的SQL语句和问题描述,我推断您希望找到所有未连接到具有特定id的
人员的
人员
?请阅读我的上一次编辑。不幸的是,我的要求已经改变了。