2011-08-16 3 views
3

J'ai un modèle pour un jour et chaque jour contient un hachage de balise.requête mongomapper sur les touches d'un hachage

class Day 
    include MongoMapper::Document 

    key :tags, Hash 
    ... 
end 

Le hachage tags pourrait ressembler à ceci { "a" => 4, "b" => 1, "c" => 1}

Je voudrais écrire une requête qui peut trouver tous les jours avec une touche tag égale à 'a'.

Day.where('tags.keys' => "a") 

Cela ne fonctionne pas, car les clés n'est pas réellement une clé dans le hachage et je suppose que je ne peux pas utiliser la méthode clés.

Je voudrais vraiment savoir s'il y a un moyen d'interroger les clés d'un hachage, sinon je vais devoir créer un tableau pour stocker les clés et requête.

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 

Répondre

5

J'ai trouvé une solution.

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

Cela renverra tous les jours avec une clé 'a'.

En fait, je peux écrire une méthode pour le jour comme celui-ci

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

Ensuite, il serait facile d'obtenir tous les jours par un certain tag comme ceci:

Day.find_all_by_tag("a")