1

我想确保所有枚举都有一个名为findByAttribute.

我可以选择方法

MATCH (enum:Enum) - [:DECLARES] -> (method:Method)
 WHERE method.static = true
 AND method.name = "findByAttribute"
RETURN enum.name, method.name

现在我想反转方法选择的条件。我试过NOT EXITS了,但没有用。

4

2 回答 2

0

拿起上一个答案的最后一个查询并稍微更正一下:

MATCH
  (enum:Enum:Type) 
WHERE NOT
  (enum)-[:DECLARES]->(:Method {static:true, name:"findByAttribute"})
RETURN
  enum.fqn
于 2018-12-05T20:36:59.517 回答
0

首先,这是您可以使用的所有运算符,以及如何使用它们

最简单的方法是使用气泡对您的逻辑进行分组。(这可能是通读一遍最容易理解的)

MATCH (enum:Enum) - [:DECLARES] -> (method:Method)
 WHERE NOT (method.static = true
 AND method.name = "findByAttribute")
RETURN enum.name, method.name

下一个最好的事情是NOT (A and B)=NOT A OR NOT B

MATCH (enum:Enum) - [:DECLARES] -> (method:Method)
 WHERE NOT method.static = true
 OR NOT method.name = "findByAttribute"
RETURN enum.name, method.name

或使用不等式运算符<>而不是反转布尔值

MATCH (enum:Enum) - [:DECLARES] -> (method:Method)
 WHERE method.static <> true
 OR method.name <> "findByAttribute"
RETURN enum.name, method.name

EXISTS 只是检查是否设置了属性,因此在这里并不真正适用,因为它可以设置。


假设反向你的意思是“这个方法不存在”,你不能进行模式匹配(从返回中删除 method.name,因为没有逻辑方法将它包含在这个版本的查询中)

MATCH (enum:Enum) 
 WHERE NOT (enum) - [:DECLARES] -> (:Method {static:true, name:"findByAttribute"})
RETURN enum.name
于 2018-12-04T15:04:01.033 回答