Zde je (možná) lepší mini návod, jak se dostat přímo do útrob vašeho MongoDB. To nemusí vyřešit váš konkrétní problém, ale mělo by vás to dostat až k verzi MongoDB SELECT * FROM table .
Nejprve budete chtít Mongo::Connection objekt. Pokud používáte MongoMapper, můžete zavolat connection class na kterémkoli z vašich modelů MongoMapper, abyste získali připojení, nebo o něj přímo požádejte MongoMapper:
connection = YourMongoModel.connection
connection = MongoMapper.connection
Jinak předpokládám, že byste použili from_uri konstruktor k vytvoření vlastního připojení.
Pak se musíte dostat k databázi, můžete to udělat pomocí zápisu přístupu k poli, db nebo získejte aktuální přímo z 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.
Nyní máte pěkný lesklý Mongo::DB instance ve vašich rukou. Pravděpodobně však budete chtít Collection dělat cokoliv zajímavého a můžete to získat buď pomocí zápisu přístupu k poli nebo pomocí collection metoda:
collection = db['collection_name']
collection = db.collection('collection_name')
Nyní máte něco, co se chová jako SQL tabulka, takže můžete count kolik věcí má nebo se na něj zeptejte pomocí find :
cursor = collection.find(:key => 'value')
cursor = collection.find({:key => 'value'}, :fields => ['just', 'these', 'fields'])
# etc.
A teď máte to, po čem opravdu toužíte:horko z trouby Mongo::Cursor která ukazuje na data, která vás zajímají. Mongo::Cursor isan Enumerable takže máte přístup ke všem svým obvyklým iterujícím přátelům, jako je each , first , map a jeden z mých osobních oblíbených, each_with_object :
a = cursor.each_with_object([]) { |x, a| a.push(mangle(x)) }
Existují také command a eval metody na Mongo::DB to může dělat, co chcete.