在 Neo4j 密码查询中使用表达式限制
Using expression for limit in Neo4j cypher query
我的密码查询是
start item= node:jobSearch ("title:Job*") WITH collect(item) as items limit 10 RETURN items as job union start item2= node:jobSearch ("title:Job*") WITH collect(item2) as item2s , count(item2) as paths match (job1:Job)-[relation]-(relationNode) where
(relationNode.name IN ['java','Dance','Programming'] OR relation.duration IN
['java','Dance','Programming']) AND NOT (job1 IN item2s) AND paths < 10 RETURN job1 as job limit 8
我在上面的查询中使用了限制 8,我想使用 10 条路径。
我该如何使用它?
所以看起来你应该能够用 limit 子句中的表达式来做到这一点,或者也许通过计算你最后一个 WITH
语句中的正确整数,(例如 WITH (10-paths) as resultCount (...) limit resultCount
)但我测试了这个,它不会工作。
为了好玩,我查看了 neo4j 源代码,看看是否遗漏了什么。 In this source file你可以看到密码语言本身的一些子句和解析规则。
坏消息是 LIMIT
表达式需要无符号整数文字或参数。所以基本上你不能做你要求做的事情,除非你在一个单独的查询中计算 (10-paths)
,然后在这个查询中放入一个 {resultCount}
参数,然后给它那个预先计算的值.这可能是很多工作,但价值不大。
从好的方面来说,除非您的结果真的非常庞大,否则最简单的方法可能是 LIMIT 10
并在您的结果集中包含整数 paths
,这样使用这些结果的代码就知道忽略比这更多的结果。
我的密码查询是
start item= node:jobSearch ("title:Job*") WITH collect(item) as items limit 10 RETURN items as job union start item2= node:jobSearch ("title:Job*") WITH collect(item2) as item2s , count(item2) as paths match (job1:Job)-[relation]-(relationNode) where
(relationNode.name IN ['java','Dance','Programming'] OR relation.duration IN
['java','Dance','Programming']) AND NOT (job1 IN item2s) AND paths < 10 RETURN job1 as job limit 8
我在上面的查询中使用了限制 8,我想使用 10 条路径。 我该如何使用它?
所以看起来你应该能够用 limit 子句中的表达式来做到这一点,或者也许通过计算你最后一个 WITH
语句中的正确整数,(例如 WITH (10-paths) as resultCount (...) limit resultCount
)但我测试了这个,它不会工作。
为了好玩,我查看了 neo4j 源代码,看看是否遗漏了什么。 In this source file你可以看到密码语言本身的一些子句和解析规则。
坏消息是 LIMIT
表达式需要无符号整数文字或参数。所以基本上你不能做你要求做的事情,除非你在一个单独的查询中计算 (10-paths)
,然后在这个查询中放入一个 {resultCount}
参数,然后给它那个预先计算的值.这可能是很多工作,但价值不大。
从好的方面来说,除非您的结果真的非常庞大,否则最简单的方法可能是 LIMIT 10
并在您的结果集中包含整数 paths
,这样使用这些结果的代码就知道忽略比这更多的结果。