首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4j.rb -不能使用

Neo4j.rb -不能使用
EN

Stack Overflow用户
提问于 2015-08-11 16:04:49
回答 1查看 137关注 0票数 1

我有3983个BISAC类型的节点。我不能用order by来取回它们。以下是起作用的因素:

代码语言:javascript
复制
irb(main):024:0* bc = Bisac.all
=> <QueryProxy  CYPHER: "MATCH (n:`Bisac`)">
irb(main):025:0> bc.count
 CYPHER 796ms MATCH (n:`Bisac`) RETURN count(n) AS n 
=> 3983
irb(main):026:0> bc.first
 CYPHER 129ms MATCH (n:`Bisac`) RETURN n ORDER BY n.uuid LIMIT {limit_1} | {:limit_1=>1}
=> #<Bisac uuid: "d1c60f13-3c70-11e5-8eb8-22000b18b199", bisac_code: "MUS037050", bisac_value: "MUSIC / Printed Music / Mixed Collections">
irb(main):027:0> bc.last
 CYPHER 127ms MATCH (n:`Bisac`) RETURN n ORDER BY n.uuid LIMIT {limit_1} | {:limit_1=>1}
=> #<Bisac uuid: "d1c60f13-3c70-11e5-8eb8-22000b18b199", bisac_code: "MUS037050", bisac_value: "MUSIC / Printed Music / Mixed Collections">

当尝试使用order时,它会像这样失败:

代码语言:javascript
复制
irb(main):033:0* bc = Bisac.order('bisac_code')
=> <QueryProxy  CYPHER: "MATCH (result_bisac:`Bisac`) ORDER BY bisac_code">
irb(main):034:0> bc.count
 CYPHER 790ms MATCH (result_bisac:`Bisac`) RETURN count(result_bisac) AS result_bisac 
=> 3983
irb(main):035:0> bc.first
 CYPHER 364ms MATCH (result_bisac:`Bisac`) WITH result_bisac ORDER BY bisac_code RETURN HEAD(COLLECT(result_bisac)) as result_bisac 
Neo4j::Session::CypherError: bisac_code not defined (line 1, column 57 (offset: 56))
"MATCH (result_bisac:`Bisac`) WITH result_bisac ORDER BY bisac_code RETURN HEAD(COLLECT(result_bisac)) as result_bisac"
                                                         ^
    from /Users/levi/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/neo4j-core-5.0.10/lib/neo4j-server/cypher_response.rb:211:in `raise_cypher_error'

这里怎么了?

我的宝石是: neo4j (5.0.14)新4j-核心(5.0.10)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-11 16:42:56

耶,我可以马上解释的事情!)

因此,计数中没有ORDER BY的原因是,它只会减慢您的count,并且永远不会返回不同的结果。

至于.order,原因是您传递的是String而不是Symbol。因为Cypher是一种比SQL更动态的查询语言,所以我曾经决定将字符串和符号区别对待。这样做的想法是,如果您指定一个字符串,您可能需要指定一个更动态的ORDER BY子句,而通常您将使用一个符号来指定要排序的属性。这实际上是在来自Queryneo4j-core API中实现的,但它会影响neo4j gem中的ActiveNode

所以答案是:

代码语言:javascript
复制
bc = Bisac.order(:bisac_code)

bc.first

尽管如此,这确实应该被记录下来,并且有可能变得更聪明。我会创造一个问题的,谢谢!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31946711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档