【问题标题】:Cypher query not returning the nodes it should returnCypher 查询不返回它应该返回的节点
【发布时间】:2015-11-05 10:09:14
【问题描述】:

我有两个节点属于两个标签之一:类或方法,在这里的两个图像中用黄色圈起来。用于查找 Method 标记节点的密码查询在所有情况下都能正常工作。然而,很奇怪的是,当使用属性选择某些节点时,返回 Class 标记节点的密码查询会给出空结果。

在上图中,可以看到查询Match (n:Class{Cycles:"52888"}) return n红色,没有给出任何东西,尽管这样的节点存在,如绿色包围。需要注意的是,在不使用属性的情况下查询 Class 节点运行良好。 当类似的查询完全正确地为 Method 标记的节点工作时,即使使用属性来选择某些节点,问题变得更加混乱,如下图所示。 谁能解释为什么 Cypher 查询与 Class 标记的节点表现不同,以及问题的解决方案是什么。

【问题讨论】:

  • “Cycles”属性值是字符串吗?
  • 是的,它是一个字符串@Luanne
  • 匹配(c:Class)返回不同的键(c)返回什么?
  • 它返回以下 Luanne - [周期,占总时间的百分比,占累计时间的百分比,调用+递归,类的名称]
  • 我也猜到Cycles 是一个长字符串而不是字符串。如果是这种情况,那么对字符串的匹配将失败并且什么也不返回。我注意到您在不严格要求的属性名称上使用了反引号。 property name 是否可能包含一些奇怪的东西? IE。如果属性名称是“Cycles”(带有额外的空格),那么查询的失败自然是有意义的。正如 Michael 所建议的,作为字符串的数值属性会引发其他可能的问题,例如空格填充。

标签: neo4j cypher


【解决方案1】:

也许在数字之前或之后有一个空格?

试试

MATCH (n:Class) WHERE trim(n.Cycles) = "52888" RETURN n

【讨论】:

    【解决方案2】:

    如果 Cycles 的属性是 Long,则使用 Query

    MATCH (n:Class) WHERE n.Cycles = 52888 RETURN n

    如果 Cycles 的属性是 String,则使用 Query

    MATCH (n:Class) WHERE n.Cycles = "52888" RETURN n

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多