【问题标题】:Neo4j & Neography - get cypher query results in a hash / openstruct objectNeo4j & Neography - 在哈希/openstruct 对象中获取密码查询结果
【发布时间】:2013-03-26 19:36:04
【问题描述】:

我正在使用令人敬畏的neography gem,在将Cypher 查询的结果转换为结构化对象(OpenStruct.new...)时遇到了一个小问题

我不知道如何从列和数据查询结果中创建哈希或 OpenStruct,它们是

{"columns"=>["p.pd_challenge_id", "p.author_id"], "data"=>[["158", "88"], ["158", "90"], ["158", "99"], ["158", "95"], ["158", "97"]]}

我无法从中创建可用的哈希。 .我尝试了几件事,包括

["data"].map{|x|{ "challenge_id" => x[1],"author_id"=>x[0]}}.to_json

结果

{{"challenge_id":158, "author_id":88}, {"challenge_id":158, "author_id":90}, {"challenge_id":158, "author_id":99}}    etc..   (to which I simply cannot convert to a hash or openstruct)

我正在寻找的是存储在结构对象中的类似以下内容,以便脚手架视图可以在未修改的情况下读取它:

{:challenge_id=>158, :author_id=>88}
{:challenge_id=>158, :author_id=>90}
{:challenge_id=>158, :author_id=>99}

我的视图会寻找 object.challenge_id

现在,我尝试在“challenge_id”上使用 to_sym,但在使用 .map 方法时无济于事..

我尝试在 ["data"] 上散列 [@mydata] 也不起作用

是否有一种简单的方法可以将所有这些数据放入结构化对象 (OpenStruct.new ..) 中,以便我的表单可以简单地读取它,就好像它正在读取活动记录查询的结果一样?我可以用 neo.get_node_properties 做到这一点,但似乎无法正常工作。

【问题讨论】:

    标签: ruby-on-rails neo4j neography


    【解决方案1】:

    假设您有两个节点,具有名称和标题。

    cypher = "start n = node(1,2) return n.name as name, n.title as title"
    results = @neo.execute_query(cypher)
    {"columns"=>["name", "title"], "data"=>[["Marc", "awesome"], ["Tom", "chief"]]} 
    

    然后你得到你的结果并这样做:

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

    这会给你留下:

    [{"name"=>"Marc", "title"=>"awesome"}, {"name"=>"Tom", "title"=>"chief"}]

    你可以在这里停下来,或者……

    objects = array_of_hashes.map{|m| OpenStruct.new(m)}

    [#<OpenStruct name="Marc", title="awesome">, #<OpenStruct name="Tom", title="chief">]

    然后您可以访问

    objects.first.name =>“马克”

    【讨论】:

    • Max - 这是一个很好的答案,但是空值呢?当数据包含它们时,生成的结构不会不对齐 - 数据位于错误的列中。有什么方法可以保留空值?
    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 2020-11-13
    • 2022-01-01
    • 1970-01-01
    相关资源
    最近更新 更多