Запрос Mongomapper по ключам хэша

У меня есть модель на день, и каждый день содержит хеш тега.

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

person lashleigh    schedule 16.08.2011    source источник


Ответы (1)


Я нашел решение.

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

Это вернет все дни с ключом «а».

На самом деле я могу написать такой метод для Day

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

Тогда было бы легко получить все дни по определенному тегу, например так:

Day.find_all_by_tag("a")
person lashleigh    schedule 16.08.2011