【问题标题】:Can't query properties with colon不能用冒号查询属性
【发布时间】:2013-11-18 13:22:31
【问题描述】:

我是 neo4j 的新手,所以我的问题对你来说可能听起来很愚蠢。

我已将 OSM 数据集导入 neo4j 图形数据库。所以目前我正在尝试从数据库中查询不同的东西,比如:

MATCH (a) WHERE has(a.addr:street) RETURN a.addr:street

它失败并出现 sysntax 错误:

Type mismatch: expected Node but was Boolean, Number, String or Collection<Any> (line 1, column 23)
"MATCH (a) WHERE has(a.addr:street) RETURN a.addr:street"
                       ^

这很奇怪,因为节点有很多带有冒号(:) 的属性。

有人知道如何查询这些属性吗?

【问题讨论】:

    标签: neo4j cypher neo4j-spatial


    【解决方案1】:

    欢迎来到 Neo4j!像: 或空格这样的字符可能会在查询中引入歧义,因为它们在查询语言中可能很重要,这会给解析器带来麻烦。您仍然可以通过将表达式括在“反引号”中来使用这些字符,即

    MATCH (a) WHERE has(a.`addr:street`) RETURN a.`addr:street`
    

    您可以查看其他一些示例here

    【讨论】:

    • 谢谢,它有效。但我看到了奇怪的事情:这个查询在新的 web UI shell (2.0) 中不起作用。我收到“无效输入 ''':预期的空白或标识符(第 1 行,第 29 列)”错误。但至于 shell 一切正常。
    • 你必须使用反引号:[`],而不是单引号:[']。 (与 StackOverflow 上用于发布短代码 sn-ps 的字符相同。)
    【解决方案2】:

    密码查询分为三个部分:

    开始,匹配并返回。 所以你在这里的查询将是::

    START a=node(1)
    MATCH (a)-[:HAS]->(addr)-[:HAS]->(street)
    RETURN street
    

    【讨论】:

    • 可能我解释的不好。问题是 db 中的节点包含 (key=addr:street, value=Rennweg) 之类的属性。所以我不能用这样的属性符号查询节点。如果 a.addr:street 将被替换为 a.name - 一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 2011-09-11
    • 2013-09-26
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多