2010-12-03 21 views
3

J'utilise mongoid pour stocker des données. J'ai un scénario où je dois trier les parents en fonction du nombre de personnes à charge qu'ils ont. Mon modèle est simple:mongoid ordering problem

charge modèle parent de references_many stored_as => array
parents en fonction du modèle de reference_many stored_as => array

Je ne veux pas faire une boucle par les parents trouver le nombre de personnes à charge, les stocker dans un tableau et les jeter à mon avis.

Ce dont j'ai besoin est de trier les parents en fonction du nombre de personnes à charge avec une seule requête. Est-ce possible?

Merci.

Répondre

8

Vous devrez ajouter un champ avec le nombre de personnes à charge et le maintenir à jour avec un rappel. Quelque chose comme:

class MyModel 
    include Mongoid::Document 

    references_many :things 
    field :thing_count, :type => Integer 

    before_update :set_thing_count 
    def set_thing_count 
    self.thing_count = self.things.count 
    end 
end 

Ensuite, votre genre serait juste:

MyModel.asc(:thing_count) 

MongoId ne fournit pas un bon mécanisme d'interrogation pour les tris encore, mais en ajoutant un champ de comptage dénormaliser est assez facile, et probablement mieux pour la performance de toute façon. J'espère que cela t'aides!