2011-02-28 19 views
9

Tôi đang sử dụng đá quý Rails 3 và Mongoid. Nhưng tôi cần phải điền vào một combobox với danh sách các cơ sở dữ liệu mongodb. Trong shell mongodb chúng ta có thể liệt kê các cơ sở dữ liệu với lệnh "show dbs". Cũng có các lệnh getDBNameList() và db.getCollectionNames() trong trình điều khiển mongodb. Nhưng tôi không thể tìm ra cách sử dụng các lệnh này từ một ruby ​​trên ứng dụng đường ray.Cách lấy danh sách cơ sở dữ liệu mongodb và danh sách bộ sưu tập từ một ứng dụng ruby ​​trên đường ray

Ngoài ra tôi tự hỏi; nếu tôi có thể nhận được cơ sở dữ liệu và danh sách các bộ sưu tập bằng cách sử dụng mongoid gem. Bởi vì tôi chắc chắn rằng tôi đã đọc rằng mongoid hỗ trợ bằng cách sử dụng nhiều hơn một cơ sở dữ liệu, nhưng tôi nghĩ rằng đó là mô hình phụ thuộc.

Vì vậy, bạn nghĩ gì; là có bất kỳ giải pháp hoặc tôi phải sử dụng đá quý mong-ruby-driver, không mongoid.

Trả lời

10

Bạn có thể làm như sau sử dụng trình điều khiển ruby ​​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

Nó sẽ được dễ dàng hơn để có được những Mongo::DB ra khỏi cấu hình Mongoid:

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

chúng ta có thể cấu hình tất cả các cơ sở dữ liệu trong Mongoid (thông qua mongoid.yml) dbs = Mongoid.databases dbs.each do | db | db.collections end – user622773

+0

connection = Mongoid.master.connection connection.database_names # => Lấy một mảng các tên db = connection.database ("name") # => Lấy một đối tượng db cụ thể db.collections # => Lấy một mảng bộ sưu tập ##### Tôi nghĩ đây là cách tốt nhất; Nhờ durran (từ github). – user622773

+2

Điều đó dường như không hoạt động đối với tôi (trên mongoid 3.x): 'NoMethodError: phương thức undefined \' master 'cho Mongoid :: Config: Module' – turboladen

2

Một phiên bản ngắn.

db = Mongoid.master 
db.collection_names 
+2

Bạn sẽ làm như thế nào với Mongoid 3.0.0? – SteveO7

13

Trong mongoid 3

Mongoid.default_session.collections # returns the collections 

tôi thường trích xuất các tên như sau:

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

default_session là default_client ở mongo 5 – Eddie

-1

Sử dụng điều khiển Java bạn có thể liệt kê tên cơ sở dữ liệu bằng cách sử dụng sau đây

Mongo mongo = new Mongo("127.0.0.1"); 
mongo.getDatabaseNames(); 
Các vấn đề liên quan