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 - Fatal编程技术网

Neo4j 塞弗:问题与更换!财产经营者

Neo4j 塞弗:问题与更换!财产经营者,neo4j,cypher,Neo4j,Cypher,我刚才看到了(这里:)那个!随着Neo4j 2.0的发布,Cypher属性表达式的运算符将被弃用。因此,我重新制定了现有的密码查询,并遇到了以下问题 1.9查询: START n=node(*),其中不是n.uniqueLabels中的“NO_FACET”!返回n限制2 我得到的:要么根本没有“uniqueLabels”属性的节点,要么有这个属性但不包含“NO_FACET”值的节点 上面链接的页面说,通过执行类似于has(n.uniqueLabels)的检查来绕过这些表达式,而不是n.uniqu

我刚才看到了(这里:)那个!随着Neo4j 2.0的发布,Cypher属性表达式的运算符将被弃用。因此,我重新制定了现有的密码查询,并遇到了以下问题

1.9查询:
START n=node(*),其中不是n.uniqueLabels中的“NO_FACET”!返回n限制2

我得到的:要么根本没有“uniqueLabels”属性的节点,要么有这个属性但不包含“NO_FACET”值的节点

上面链接的页面说,通过执行类似于
has(n.uniqueLabels)的检查来绕过这些表达式,而不是n.uniqueLabels
中的“NO_FACET”。这个查询可以工作,但显然不是我想要的(我还想要返回根本没有属性的节点)。 提议的规避看起来像是一种懒惰的评估,这对我来说很好。因此我做了以下工作:

START n=node(*)WHERE NOT(具有(n.uniqueLabels)和n.uniqueLabels中的“NO_FACET”)返回n limit 2;

但这里我得到一个错误:
==>EntityNotFoundException:节点[0]上不存在属性“uniqueLabels”
因此,评估毕竟不是那么懒惰?奇怪的是,这个查询是有效的:

START n=node(*),其中has(n.uniqueLabels)和n.uniqueLabels中的“NO_FACET”返回n limit 2;

当然,它只是给了我与我想要的完全相反的结果

实际上,我可以在没有操作员的情况下得到我想要的:

START n=node(*)其中不具有(n.uniqueLabels)或(具有(n.uniqueLabels)且在n.uniqueLabels中不具有“NO_FACET”)返回n限制2;

但我不确定这是否是不推荐使用该运算符时的意图。因此,问题是我是否错过了正确的方法,或者与不在括号外的运算符的行为和结合是否是一个bug

顺便问一下:现在有人知道为什么!操作符一开始就被弃用了吗?我喜欢;-)


感谢您的阅读和问候!

我相信这可能是由于NOT如何计算其中的表达式造成的。它可能不会使and表达式短路,从而导致它不计算第二个表达式

一个解决方案是(摧毁CS 101)。您的查询将变成:

START n=node(*) 
WHERE NOT(has(n.uniqueLabels)) OR NOT("NO_FACET" in n.uniqueLabels)) 
RETURN n limit 2;

我不能100%确定为什么不推荐使用此运算符,这可能与使Cypher语言关键字更符合SQL之类的内容有关,但您的情况更像是他们系统中的一个bug,因为表达式应该在not语句上和not语句中短路。

您说得对,我当然可以重新格式化查询。但是,由于弃用页面给出了如何替换运算符的说明,我想知道,随着事情变得更加复杂,为什么它似乎不起作用。这给了我两个选择:现在不要更改任何内容,等待问题解决,或者重新制定所有查询,冒着做不必要工作的风险。目前,我会选择等待,因为目前一切正常。这可能是他们在设置页面时没有考虑到的情况之一。