【问题标题】:How do I search within an array of hashes inside a hash by hash values?如何按哈希值在哈希内的哈希数组中搜索?
【发布时间】:2016-06-27 08:52:48
【问题描述】:

我是 ruby​​ 和 Mongo 的新手,正在寻找这个问题的答案......

我有一个 mongo 记录数据库,其中包含这样的记录 - 哈希嵌入在数组中嵌入的哈希中

{
  "id =>1",
  "address" =>[
    {
      "number" => 1404,
      "street" =>"jasmine",
      "city" => "NY",
      "state" => "NY",
      "zip" => "02941"
    }, 
    {
      "number" => 2400,
      "street" =>"miner",
      "city" => "Boston",
      "state" => "MA",
      "zip" => "02760"
    },
    {etc..}
  ], 
  "geo" => { "lat" => 33.875, "lon" => -116.301 }     
  "first_name"=> "joe",
  "last_name" =>  "smith"
}

{ 
  "id" =>"2",
  "address" =>[{...},{...}, etc ],
  "geo" => {"lat" => 32.875, "lon" => -115.301 }, 
  "first_name"=> "john",
  "last_name"=>"doe"
} 

我想查找/返回所有包含“street”==“jasmine”的记录,如何在查找条件中引用“street”?

【问题讨论】:

标签: ruby-on-rails ruby mongodb hash


【解决方案1】:

如果你正在遍历每个对象:

objects_on_jasmine_street = []

NameOfObject.find_each do |object|
  if object['address'][0]['street'] # this will return street
     object_on_jasmine_street << object
  end
end

objects_on_jasmine_street

【讨论】:

  • 有点“rubyesque”,不是使用“数据库”的最佳方式。此外,使用MongoDB时还有一个much simpler way,这就是问题所在。
【解决方案2】:

我相信在 Mongo 中搜索数组属性非常慢 - 考虑将地址的哈希值转换为对象实例。然后像往常一样简单地搜索您的Address 对象而不是您的User 对象。您也可以考虑为您的Address 对象上的street 属性编制索引,以便在搜索时变得更快。

【讨论】:

    猜你喜欢
    • 2017-02-15
    • 2011-01-15
    • 2010-10-30
    • 2010-10-20
    • 2021-02-05
    • 2014-10-27
    • 1970-01-01
    • 2010-09-08
    • 2011-04-20
    相关资源
    最近更新 更多