2010-09-23 78 views
5

Desde Mongoid.master.collection() devuelve una colección incluso si la colección no existe, podemos utilizar¿Cómo saber si existe una colección en MongoDB usando Mongoid?

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

para probar si se trata de una colección vacía. Otro método es recorrer el

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

, pero ¿hay una forma más sencilla de detectar si existe?

Respuesta

8

No estoy seguro de cómo hacerlo a través de Mongoid, pero en general puede consultar la colección system.namespaces para {name : "dbname.analyticsCachedResult"}.

+1

ah, gracias por la pista. Esta línea también funciona: 'Mongoid.master.collections.map {| c | c.name} .include? 'analyticsCachedResult'' aunque si Mongoid tiene una llamada así, puede ser mejor. –

1

Uso del controlador de mongo rubí, me extendió la clase 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 
Cuestiones relacionadas