代码之家  ›  专栏  ›  技术社区  ›  Sebastian Wramba

包含RegEx的Neo4j custom-Cypher@查询不返回结果

  •  0
  • Sebastian Wramba  · 技术社区  · 8 年前

    在我的 Neo4jRepository (我正在使用Spring Boot和Spring Data Neo4j):

    @Query("MATCH (n:Component) WHERE n.path =~ '/path/{0}/.*/{1}' RETURN n")
    Component findByTenantAndName(String tenant, String name);
    

    当我在应用程序中运行此查询时,它将返回 null 使用以下日志语句:

    2018-01-12 10:58:27.744  INFO 74294 --- [nio-8080-exec-1] o.n.o.drivers.bolt.request.BoltRequest   : Request: MATCH (n:Component) WHERE n.path =~ '/path/{0}/.*/{1}' RETURN n with params {0=foo, 1=baz}
    2018-01-12 10:58:27.763  WARN 74294 --- [nio-8080-exec-1] d.c.a.service.MyService  : Could not find parent component named 'baz' for tenant 'foo'
    

    但是,如果我在 http://localhost:7474 并运行查询:

    MATCH (n:Component) WHERE n.path =~ '/path/foo/.*/baz' RETURN n
    

    我正好得到一个 Component 具有路径的结果 /path/foo/bar/baz . 我的自定义查询有什么问题?

    1 回复  |  直到 8 年前
        1
  •  2
  •   pvpkiran    8 年前
    @Query("MATCH (n:Component) WHERE n.path =~ {0} RETURN n")
    Component findByTenantAndName(String query);
    

    从你称之为的服务中。像这样传递整个正则表达式

    String query = "/path/<tenant>/.*/<name>"; // replace tenant and name with actual variables.
    findByTenantAndName(query)