Ответ 1
Здесь (возможно) лучший мини-учебник о том, как напрямую попасть в кишки вашего 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
, которые могут делать то, что вы хотите.