Предположим, у нас есть коллекция MongoDB под названием «изображения», а приложение MongoMapper с соответствующей моделью «Изображение». Если мы создали запрос MongoMapper с использованием этой модели, мы видим, что это приводит типа Plucky::Query
и возвратов типа Image
:Как получить исходные данные Mongo от MongoMapper Plucky :: Объект запроса?
>> Image.where(:file_type => 'image/jpeg').class
=> Plucky::Query
>> Image.where(:file_type => 'image/jpeg').first.class
=> Image
Мы можем запустить соответствующий запрос непосредственно на адаптере Монго, в основном, минуя MongoMapper, по доступ к MongoMapper.connection
. Если мы делаем это таким образом, запрос имеет тип Mongo::Cursor
и возвращает исходные результаты данных типа BSON::OrderedHash
:
>> MongoMapper.connection.db(dbname).collection('images').find({ :file_type => 'image/jpeg' }).class
=> Mongo::Cursor
>> MongoMapper.connection.db(dbname).collection('images').find({ :file_type => 'image/jpeg' }).first.class
=> BSON::OrderedHash
Вопрос заключается в том, есть ли способ, чтобы взять Plucky::Query
как выше, и преобразовать его (или получить от него) базовый, не расширенный объект Mongo::Cursor
?
Сначала я думал, что я нашел решение с find_each
, который на самом деле взять Plucky::Query
и возвращать Mongo::Cursor
:
>> Image.where(:file_type => 'image/jpeg').find_each.class
=> Mongo::Cursor
Но оказывается, что это Mongo::Cursor
каким-то образом расширить или иным образом отличается от приведенной выше, потому что она по-прежнему возвращает Image
объектов вместо BSON::OrderHash
объектов:
>> Image.where(:file_type => 'image/jpeg').find_each.first.class
=> Image
Update: Я просто не могу обойти магический MongoMapper запроса альта gether, как и во втором случае, потому что мне нужно получить доступ к функциям MongoMapper (специально названных областей) для создания запроса, поэтому в итоге я получаю Plucky::Query
. Но тогда я хочу, чтобы результаты были объектами данных, а не моделями, потому что все, что мне нужно, это данные, и я не хочу накладных расходов на создание экземпляра модели.
Спасибо, но это не сработает в моем случае, потому что я хочу использовать функции MongoMapper для создания исходного запроса. Я уточняю свой вопрос, чтобы подробно остановиться на этом вопросе. –