Mongomapper查询哈希的键

las*_*igh 3 hash key mongomapper ruby-on-rails-3

我有一天的模型,每天都包含一个标签哈希.

class Day
  include MongoMapper::Document

  key :tags, Hash
  ...
end
Run Code Online (Sandbox Code Playgroud)

标签哈希可能看起来像这样{"a"=> 4,"b"=> 1,"c"=> 1}

我想写一个查询,可以找到标签键等于'a'的所有日子.

Day.where('tags.keys' => "a")
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为键实际上不是哈希中的键,我猜我不能只使用键方法.

我真的想知道是否有办法查询哈希的键,否则我将不得不创建一个数组来存储键和查询.

tags = {"a"=>4, "b"=>1, "c"=>1, "names" => ["a", "b", "c"]}

Day.where('tags.names' => "a") #This would work find, but is not what I want
Run Code Online (Sandbox Code Playgroud)

las*_*igh 5

我找到了解决方案.

Day.where('tags.a'=> {'$ exists'=> true})

这将使用'a'键返回所有日期.

事实上,我可以像这样为Day编写方法

def self.find_all_by_tag(tag)
  Day.where("tags.#{tag}" => {'$exists' => true}).all
end
Run Code Online (Sandbox Code Playgroud)

然后通过这样的特定标签很容易获得所有日期:

Day.find_all_by_tag("a")
Run Code Online (Sandbox Code Playgroud)