Ето (евентуално) по-добър мини-урок за това как да влезете директно в вътрешността на вашия MongoDB. Това може да не реши конкретния ви проблем, но трябва да ви стигне до версията на MongoDB на SELECT * FROM table
.
На първо място, вие ще искате Mongo::Connection
обект. Ако използвате MongoMapper, тогава можете да извикате connection
class метод на всеки от вашите модели 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
isan Enumerable
така че имате достъп до всичките си обичайни итерации, като each
, first
, map
, и един от моите лични любими, each_with_object
:
a = cursor.each_with_object([]) { |x, a| a.push(mangle(x)) }
Има и command
и eval
методи на Mongo::DB
това може да направи това, което искате.