我在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
如果我使用cypher中的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将/应该正常工作..
有任何答案或建议吗?
错误的result
是:
{"columns"=>["collect(comment_list)"], "data"=>[[[]]]}
好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}}]]]}
答案 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
已经混淆了关键字和好的情况下的值。我相信,你必须修改转换程序。