2010-09-23 7 views
5

Depuis Mongoid.master.collection() retourne une collection, même si la collection n'existe pas, nous pouvons utiliserComment savoir si une collection existe dans MongoDB en utilisant Mongoid?

coll = Mongoid.master.collection('analyticsCachedResult') 
if coll.count == 0 
    # [...] 
end 

pour tester si elle est une collection vide. Une autre méthode consiste à faire une boucle

Mongoid.master.collections.each do |c| 
    return c if c.name == 'analyticsCachedResult' 
end 
return nil 

mais existe-t-il un moyen plus simple de détecter s'il existe?

Répondre

8

Je ne sais pas comment le faire via Mongoid, mais en général, vous pouvez interroger les system.namespaces collection pour {name : "dbname.analyticsCachedResult"}.

+1

ah, merci pour l'indice. Cette ligne fonctionne aussi: 'Mongoid.master.collections.map {| c | c.nom} .include? 'analyticsCachedResult'' bien que si Mongoid a un tel appel cela peut être mieux. –

1

Utilisation du pilote rubis mongo, j'étendu la classe DB:

class Mongo::DB 
    def collection_exists?(collection_name) 
    x = "#{self.name}.#{collection_name}" # e.g., "redbike_db.clients" 
    nil != self['system.namespaces'].find_one({'name' => x}) 
    end 
end 
Questions connexes