Neo4j - null会在将结果转换为哈希数组时导致“哈希的奇数个参数”

时间:2014-02-04 08:12:16

标签: ruby-on-rails ruby neo4j cypher

我在(neo4j 1.9)中返回了一系列评论,一切都很顺利。

如果没有评论,则收集为[ ] ..

好的,所以这在控制台中效果很好 - 看结果?

==> | 5548       | [ ]  |
==> | 5552       | [Node[5554]{views:0, comment:"test"},Node[5552]{views:0,comment:"terrible"},Node[5550]{views:0,comment:"RIP"}] |

问题是节点 5548 集合[],导致这条Ruby on Rails(V1.9.3)代码炸弹:

array_of_hashes = results["data"].map {|row| Hash[*results["columns"].zip(row).flatten] }

我收到的错误是:

odd number of arguments for Hash

如果我使用中的where语句过滤掉 5548 ,没问题。如果我没有过滤或过滤以获取节点 5548 ,它是炸弹。

results["data"].map {|row| Hash[*results["columns"].zip(row)] }为此记录返回[{}]。所以基本上缺乏参数(或奇数个)导致问题..

所以,问题是,在Cypher或ROR中避免这种情况的最佳方法是什么?在转换为哈希数组之前,我可以用其他东西替换collect列中[ ]的出现次数吗?也许用[ ]替换具有空值的节点的结构,如:

将记录 5548 中的[ ]替换为[Node[0]{views:0, comment:""}],然后在结果数据中使节点 5548 如下所示:

5548         | [Node[0]{views:0, comment:""}] |

之后转换为array_of_hashes将/应该正常工作..

有任何答案或建议吗?

  1. 错误的result是:

    {"columns"=>["collect(comment_list)"], "data"=>[[[]]]}
    
  2. result是:

    {"columns"=>["cl"], "data"=>[[[{"extensions"=>{}, "paged_traverse"=>"http://localhost:7474/db/data/node/5554/paged/traverse/{returnType}{?pageSize,leaseTime}", "outgoing_relationships"=>"http://localhost:7474/db/data/node/5554/relationships/out", "traverse"=>"http://localhost:7474/db/data/node/5554/traverse/{returnType}", "all_typed_relationships"=>"http://localhost:7474/db/data/node/5554/relationships/all/{-list|&|types}", "property"=>"http://localhost:7474/db/data/node/5554/properties/{key}", "all_relationships"=>"http://localhost:7474/db/data/node/5554/relationships/all", "self"=>"http://localhost:7474/db/data/node/5554", "properties"=>"http://localhost:7474/db/data/node/5554/properties", "outgoing_typed_relationships"=>"http://localhost:7474/db/data/node/5554/relationships/out/{-list|&|types}", "incoming_relationships"=>"http://localhost:7474/db/data/node/5554/relationships/in", "incoming_typed_relationships"=>"http://localhost:7474/db/data/node/5554/relationships/in/{-list|&|types}", "create_relationship"=>"http://localhost:7474/db/data/node/5554/relationships", "data"=>{"comment"=>"test", "author_id"=>"5338", "out"=>"out of ourder", "votes"=>0, "type"=>"comment", "spam"=>false, "shares"=>0, "dislikes"=>0, "abuse"=>false, "copywriteviolation"=>false, "comments"=>0, "likes"=>0, "views"=>0}}, {"extensions"=>{}, "paged_traverse"=>"http://localhost:7474/db/data/node/5552/paged/traverse/{returnType}{?pageSize,leaseTime}", "outgoing_relationships"=>"http://localhost:7474/db/data/node/5552/relationships/out", "traverse"=>"http://localhost:7474/db/data/node/5552/traverse/{returnType}", "all_typed_relationships"=>"http://localhost:7474/db/data/node/5552/relationships/all/{-list|&|types}", "property"=>"http://localhost:7474/db/data/node/5552/properties/{key}", "all_relationships"=>"http://localhost:7474/db/data/node/5552/relationships/all", "self"=>"http://localhost:7474/db/data/node/5552", "properties"=>"http://localhost:7474/db/data/node/5552/properties", "outgoing_typed_relationships"=>"http://localhost:7474/db/data/node/5552/relationships/out/{-list|&|types}", "incoming_relationships"=>"http://localhost:7474/db/data/node/5552/relationships/in", "incoming_typed_relationships"=>"http://localhost:7474/db/data/node/5552/relationships/in/{-list|&|types}", "create_relationship"=>"http://localhost:7474/db/data/node/5552/relationships", "data"=>{"comment"=>"terrible", "author_id"=>"5338", "out"=>"out of ourder", "votes"=>0, "type"=>"comment", "spam"=>false, "shares"=>0, "dislikes"=>0, "abuse"=>false, "copywriteviolation"=>false, "comments"=>0, "likes"=>0, "views"=>0}}, {"extensions"=>{}, "paged_traverse"=>"http://localhost:7474/db/data/node/5550/paged/traverse/{returnType}{?pageSize,leaseTime}", "outgoing_relationships"=>"http://localhost:7474/db/data/node/5550/relationships/out", "traverse"=>"http://localhost:7474/db/data/node/5550/traverse/{returnType}", "all_typed_relationships"=>"http://localhost:7474/db/data/node/5550/relationships/all/{-list|&|types}", "property"=>"http://localhost:7474/db/data/node/5550/properties/{key}", "all_relationships"=>"http://localhost:7474/db/data/node/5550/relationships/all", "self"=>"http://localhost:7474/db/data/node/5550", "properties"=>"http://localhost:7474/db/data/node/5550/properties", "outgoing_typed_relationships"=>"http://localhost:7474/db/data/node/5550/relationships/out/{-list|&|types}", "incoming_relationships"=>"http://localhost:7474/db/data/node/5550/relationships/in", "incoming_typed_relationships"=>"http://localhost:7474/db/data/node/5550/relationships/in/{-list|&|types}", "create_relationship"=>"http://localhost:7474/db/data/node/5550/relationships", "data"=>{"comment"=>"RIP", "author_id"=>"5338", "out"=>"out of ourder", "votes"=>0, "type"=>"comment", "spam"=>false, "shares"=>0, "dislikes"=>0, "abuse"=>false, "copywriteviolation"=>false, "comments"=>0, "likes"=>0, "views"=>0}}]]]}
    

1 个答案:

答案 0 :(得分:1)

尝试代码:

results["data"].map do|row|
   a = results["columns"].zip(row).flatten
   a << nil if a.size % 2 > 0
   Hash[*a]
end

但正如我所说的那样,数组results["columns"].zip(row).flatten].keys已经混淆了关键字和好的情况下的值。我相信,你必须修改转换程序。