2010-09-23 16 views
5

Poiché Mongoid.master.collection() restituisce una raccolta anche se la raccolta non esiste, possiamo usareCome sapere se esiste una raccolta in MongoDB usando Mongoid?

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

per verificare se è un insieme vuoto. Un altro metodo è quello di scorrere attraverso

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

ma c'è un modo più semplice per rilevare se esiste?

risposta

8

Non so come farlo attraverso Mongoid, ma in generale è possibile interrogare la collezione system.namespaces per {name : "dbname.analyticsCachedResult"}.

+1

ah, grazie per il suggerimento. Anche questa linea funziona: 'Mongoid.master.collections.map {| c | c.name} .include? 'analyticsCachedResult'' anche se Mongoid ha una tale chiamata potrebbe essere migliore. –

1

Utilizzando il driver mongo rubino, ho esteso 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 
Problemi correlati