MongoMapper запускает простые запросы MongoDB - PullRequest
0 голосов
/ 03 ноября 2011

Я запускаю приложение Rails и использую MongoDB в качестве хранилища базы данных. Для части отображения данных я использую гем MongoMapper.

MongoMapper - это замечательно, если я хочу имитировать функциональность моделей ActiveRecord, но мой вопрос заключается в том, можно ли или нет запускать простые запросы MongoDB через MongoMapper, например, напрямую запрашивать коллекцию (а именно, без явной модели, которая включает в себя поля и так далее) или я должен использовать драгоценный камень Монго для рубина?

Спасибо

1 Ответ

0 голосов
/ 14 августа 2012

Я украл это в основном из Как запускать необработанные запросы MongoDB непосредственно в Ruby

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, так что вы можете подсчитать, сколько у него вещей или запросить это, используя find:

cursor = collection.find(:key => 'value')
cursor = collection.find({:key => 'value'}, :fields => ['just', 'these', 'fields'])

и т.д.

вывод строки

cursor.each { |row| puts row } 

И теперь у вас есть то, что вам действительно нужно: горячий из печи Mongo :: Cursor, который указывает на интересующие вас данные. Mongo :: Cursor - это Enumerable, поэтому у вас есть доступ ко всем своим обычным повторяющиеся друзья, такие как каждый, сначала карта, и один из моих личных избранных, each_with_object:

a = cursor.each_with_object([]) { |x, a| a.push(mangle(x)) }
...