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

class Day
  include MongoMapper::Document

  key :tags, Hash
  ...
end

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

我想编写一个查询,可以找到标签键等于“a”的所有日子。
Day.where('tags.keys' => "a")

这不起作用,因为键实际上不是散列中的键,我猜我不能只使用键方法。

我真的很想知道是否有办法查询散列的键,否则我将不得不创建一个数组来存储键并查询它。
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

最佳答案

我找到了解决办法。

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

这将使用“a”键返回所有天数。

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

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

然后很容易通过这样的某个标签获得所有的日子:
Day.find_all_by_tag("a")

关于ruby-on-rails-3 - 对哈希键的 Mongomapper 查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7085994/

10-13 03:38