Đây là một hướng dẫn nhỏ (có thể) tốt hơn về cách truy cập trực tiếp vào phần bên trong MongoDB của bạn. Điều này có thể không giải quyết được vấn đề cụ thể của bạn nhưng nó sẽ giúp bạn hiểu được phiên bản MongoDB của bảng SELECT * FROM table
.
Trước hết, bạn sẽ cần một Mongo::Connection
vật. Nếu bạn đang sử dụng MongoMapper thì bạn có thể gọi connection
phương thức lớp trên bất kỳ mô hình MongoMapper nào của bạn để có được một nhà tài trợ kết nối, hãy hỏi trực tiếp MongoMapper về nó:
connection = YourMongoModel.connection
connection = MongoMapper.connection
Nếu không, tôi đoán bạn sẽ sử dụng from_uri
phương thức khởi tạo để xây dựng kết nối của riêng bạn.
Sau đó, bạn cần bắt tay vào cơ sở dữ liệu, bạn có thể thực hiện việc này bằng cách sử dụng ký hiệu truy cập mảng, db
hoặc lấy phương thức hiện tại trực tiếp từ MongoMapper:
db = connection['database_name'] # This does not support options.
db = connection.db('database_name') # This does support options.
db = MongoMapper.database # This should be configured like
# the rest of your app.
Bây giờ bạn có một Mongo::DB
sáng bóng đẹp mắt trong tay bạn. Tuy nhiên, bạn có thể muốn có Collection
để làm bất cứ điều gì thú vị và bạn có thể đạt được điều đó bằng cách sử dụng ký hiệu truy cập mảng hoặc collection
phương pháp:
collection = db['collection_name']
collection = db.collection('collection_name')
Bây giờ bạn có một cái gì đó hoạt động giống như một bảng SQL, bạn có thể count
nó có bao nhiêu thứ hoặc truy vấn nó bằng cách sử dụng find
:
cursor = collection.find(:key => 'value')
cursor = collection.find({:key => 'value'}, :fields => ['just', 'these', 'fields'])
# etc.
Và bây giờ bạn có những gì bạn thực sự muốn:một cái lò nóng ra khỏi lò Mongo::Cursor
trỏ đến dữ liệu mà bạn quan tâm. Mongo::Cursor
isan Enumerable
vì vậy bạn có quyền truy cập vào tất cả các bạn trai lặp lại thông thường của mình, chẳng hạn như each
, first
, map
và một trong những mục yêu thích cá nhân của tôi, each_with_object
:
a = cursor.each_with_object([]) { |x, a| a.push(mangle(x)) }
Ngoài ra còn có command
và eval
các phương thức trên Mongo::DB
điều đó có thể làm những gì bạn muốn.