Вот (возможно) лучший мини-учебник о том, как получить доступ к внутренностям вашего MongoDB.Возможно, это не решит вашу конкретную проблему, но вам нужно получить версию MongoDB SELECT * FROM table
.
Прежде всего, вам понадобится Mongo::Connection
объект.Если вы используете MongoMapper , вы можете вызвать метод класса connection
в любой из ваших моделей MongoMapper, чтобы получить соединение, или напрямую запросить MongoMapper:
connection = YourMongoModel.connection
connection = MongoMapper.connection
В противном случае яПолагаю, вы использовали бы конструктор from_uri
для создания своего собственного соединения.
Затем вам нужно получить доступ к базе данных, вы можете сделать это с помощью доступа к массиву обозначение , метод db
, или получить текущий прямо из 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.
Теперь у вас есть хороший блестящий Mongo::DB
экземпляр в твоих руках.Но вы, вероятно, хотите, чтобы Collection
делал что-нибудь интересное, и вы можете получить это, используя запись доступа к массиву или метод collection
:
collection = db['collection_name']
collection = db.collection('collection_name')
Теперь у вас есть что-то, что ведет себя как таблица SQL, так что вы можете count
сколько вещей у него есть или запросить его, используя find
:
cursor = collection.find(:key => 'value')
cursor = collection.find({:key => 'value'}, :fields => ['just', 'these', 'fields'])
# etc.
И теперь у вас есть то, что вам действительно нужно: горячий из духовки Mongo::Cursor
, который указывает на интересующие вас данные. Mongo::Cursor
- это Enumerable
, поэтому у вас есть доступ ко всем вашим обычным итерирующимся друзьям, таким как each
, first
, map
и один из моихличные избранные, each_with_object
:
a = cursor.each_with_object([]) { |x, a| a.push(mangle(x)) }
Есть также command
и eval
методов для Mongo::DB
, которыеможет делать то, что вы хотите.