MongoMapper запускает простые запросы MongoDB

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

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

Спасибо


person Victor Blaga    schedule 03.11.2011    source источник


Ответы (1)


Я украл это в основном из Как запускать необработанные запросы 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 = 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)) }
person jmontross    schedule 14.08.2012