1

rethink db に ruby​​ ドライバーを使用していますが、配列を持つネストされた要素で問題が発生しています。

私は自分のデータをこのように構造化しています

[{"family_name"=>"Adam"},
 {"family_name"=>"Bobby"},
 {"family_name"=>"Crissy",
  "groups"=>
   [{"logo_url"=>"https://www.logourl.com/1111.png",
     "name"=>"Sample Name 1",
     "profile_url"=>"https://www.profileurl.com/groups?gid=1111"},
    {"logo_url"=>"https://www.logourl.com/2222.png",
     "name"=>"Sample Name 2",
     "profile_url"=>"https://www.profileurl.com/groups?gid=2222"},
    {"logo_url"=>"https://www.logourl.com/3333.png",
     "name"=>"Sample Name 3",
     "profile_url"=>"https://www.profileurl.com/groups?gid=3333"},
   ]},
 {"family_name"=>"Bobby"},
 {"family_name"=>"Hillton",
  "groups"=>
   [{"logo_url"=>"https://www.logourl.com/4444.png",
     "name"=>"Sample Name 1",
     "profile_url"=>"https://www.profileurl.com/groups?gid=4444"},
    {"logo_url"=>"https://www.logourl.com/5555.png",
     "name"=>"Sample Name 2",
     "profile_url"=>"https://www.profileurl.com/groups?gid=55555"},
    {"logo_url"=>"https://www.logourl.com/6666.png",
     "name"=>"Sample Name 3",
     "profile_url"=>"https://www.profileurl.com/groups?gid=12345"},
    ]}]

望ましい結果は、「12345」で終わる「profile_url」リンクを含む行を返すことです。RubyとJavascriptを組み合わせて使用​​して、これを試みました:

'r.table("profiles").filter{ |row| row['groups'].contains(r.js('function(group) { return group('profile_url').match("12345$") }'))}.run(conn)'

しかし、それでも結果が返ってこないのですが、Ruby ドライバーで明確に使用する方法はありますか?

望ましい結果は

[{"family_name"=>"Hillton",
  "groups"=>
   [{"logo_url"=>"https://www.logourl.com/4444.png",
     "name"=>"Sample Name 1",
     "profile_url"=>"https://www.profileurl.com/groups?gid=4444"},
    {"logo_url"=>"https://www.logourl.com/5555.png",
     "name"=>"Sample Name 2",
     "profile_url"=>"https://www.profileurl.com/groups?gid=55555"},
    {"logo_url"=>"https://www.logourl.com/6666.png",
     "name"=>"Sample Name 3",
     "profile_url"=>"https://www.profileurl.com/groups?gid=12345"},
    ]}]

助けてください、事前に感謝します!!! :D

4

1 に答える 1

3

私はこれがあなたが望むことをすると思います:

r.table('profiles').filter {|row|
  row['groups'].contains {|group|
    group['profile_url'].match('12345$')
  }
}
于 2016-04-22T11:29:11.803 に答える