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中不起作用的入职关系的WHERE NOT条款_Neo4j_Cypher - Fatal编程技术网

Neo4j中不起作用的入职关系的WHERE NOT条款

Neo4j中不起作用的入职关系的WHERE NOT条款,neo4j,cypher,Neo4j,Cypher,我有一个neo4j数据库,其中两个用户试图交易多张卡。 每个交易节点对交易涉及的两个用户有两个传出关系, 以及正在交易的卡片。 如果未达成协议,则会创建一个后续交易,指向具有先前关系的前一交易。 如果达成协议,贸易链的最后一个节点将标记为success:true属性 下图显示了两个用户之间的交易示例 我正在尝试获取ID为10和20的两个用户之间的所有最后交易节点。 最后一个交易节点是没有传入关系的节点 我的尝试是: MATCH (u:User)<--(t:Trade)-->(n:U

我有一个neo4j数据库,其中两个用户试图交易多张卡。 每个交易节点对交易涉及的两个用户有两个传出关系, 以及正在交易的卡片。 如果未达成协议,则会创建一个后续交易,指向具有
先前关系的前一交易。
如果达成协议,贸易链的最后一个节点将标记为
success:true
属性

下图显示了两个用户之间的交易示例

我正在尝试获取ID为10和20的两个用户之间的所有最后交易节点。 最后一个交易节点是没有传入关系的节点

我的尝试是:

MATCH (u:User)<--(t:Trade)-->(n:User)
WHERE (ID(u)=10 AND ID(n)=20) OR (ID(u)=20 AND ID(n)=10) 
AND NOT (t)<-[:PREVIOUS]-()
RETURN t
匹配(u:用户)(n:用户)
其中(ID(u)=10且ID(n)=20)或(ID(u)=20且ID(n)=10)

而不是(t)我认为问题在于布尔求值的顺序

也就是说,并在或之前(但在括号之后)进行计算,因此您(简化了)得到的结果是:

其中()或()和

首先计算AND分组,因此其行为类似于:

WHERE()或(()和)

因此,只要第一个id检查的结果为true,那么整个WHERE子句都将显示为true

要修复此问题,请在ID谓词周围添加括号,如下所示:

WHERE ((ID(u)=10 AND ID(n)=20) OR (ID(u)=20 AND ID(n)=10))
AND NOT (t)<-[:PREVIOUS]-()
式中((ID(u)=10且ID(n)=20)或(ID(u)=20且ID(n)=10))

事实并非如此。我的解释稍微简化了一点。