2011-02-28 6 views
9

Sto utilizzando Rails 3 e Gemoid gemoid. Ma ho bisogno di riempire una casella combinata con l'elenco dei database mongodb. Nella shell di mongodb possiamo elencare i database con il comando "show dbs". Inoltre ci sono i comandi getDBNameList() e db.getCollectionNames() nei driver mongodb. Ma non riuscivo a capire come usare questi comandi da un'app ruby ​​on rails.Come ottenere l'elenco dei database mongodb e l'elenco delle raccolte da un'app ruby ​​on rails

Anche io mi chiedo; se posso ottenere database e liste di collezioni con l'uso della gemma mongoid. Perché sono sicuro di aver letto che mongoid supporta l'utilizzo di più di un database, ma penso che dipendesse dal modello.

Quindi cosa ne pensi; c'è qualche soluzione o devo usare gemma mongo-ruby-driver, non mongoid.

risposta

10

È possibile effettuare le seguenti operazioni utilizzando il driver rubino mongo:

require 'rubygems' 
require 'mongo' 

connection = Mongo::Connection.new("localhost") 
connection.database_names.each do |name| 
    db = connection.db(name) 
    db.collections.each do |collection| 
    puts "#{name} - #{collection.name}" 
    end 
end 
3

Sarebbe più facile per ottenere il Mongo::DB dalla configurazione Mongoid:

db = Mongoid::Config.master 
db.collection_names 
+0

possiamo configurare tutti i database in Mongoide (via mongoid.yml) dbs = Mongoid.databases dbs.each do | db | db.collections end – user622773

+0

connection = Mongoid.master.connection connection.database_names # => Ottieni un array di nomi db = connection.database ("name") # => Ottieni un oggetto db specifico db.collections # => Ottieni un array di collezioni ##### Penso che questo sia il modo migliore; Grazie a durran (da github). – user622773

+2

Non sembra funzionare per me (su mongoid 3.x): 'NoMethodError: metodo non definito \' master 'per Mongoid :: Config: Module' – turboladen

2

Una breve versione.

db = Mongoid.master 
db.collection_names 
+2

Come lo faresti con Mongoid 3.0.0? – SteveO7

13

In mongoid 3

Mongoid.default_session.collections # returns the collections 

Io di solito estrarre i nomi come segue:

Mongoid.default_session.collections.map(&:name).sort 
+1

default_session è default_client in mongo 5 – Eddie

-1

utilizza il driver di Java è possibile elencare i nomi dei database utilizzando il seguente

Mongo mongo = new Mongo("127.0.0.1"); 
mongo.getDatabaseNames();