Hier is een (mogelijk) betere mini-tutorial over hoe je direct in het lef van je MongoDB kunt komen. Dit lost uw specifieke probleem misschien niet op, maar het zou u zo ver moeten brengen als de MongoDB-versie van SELECT * FROM table
.
Allereerst wil je een Mongo::Connection
voorwerp. Als u MongoMapper gebruikt, kunt u de connection
. bellen class-methode op al uw MongoMapper-modellen om een verbinding te krijgen of vraag MongoMapper er rechtstreeks om:
connection = YourMongoModel.connection
connection = MongoMapper.connection
Anders zou je denk ik de from_uri
. gebruiken constructor om je eigen verbinding te bouwen.
Dan moet u een database in handen krijgen, u kunt dit doen met behulp van de array-toegangsnotatie, de db
methode, of haal de huidige rechtstreeks van 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.
Nu heb je een mooie glanzende Mongo::DB
exemplaar in uw handen. Maar u wilt waarschijnlijk een Collection
om iets interessants te doen en je kunt dat krijgen met behulp van de array-toegangsnotatie of decollection
methode:
collection = db['collection_name']
collection = db.collection('collection_name')
Nu heb je iets dat zich gedraagt als een SQL-tabel, dus je kunt count
hoeveel dingen het heeft of zoek het op met find
:
cursor = collection.find(:key => 'value')
cursor = collection.find({:key => 'value'}, :fields => ['just', 'these', 'fields'])
# etc.
En nu heb je waar je echt naar op zoek bent:een hete uit de oven Mongo::Cursor
die verwijst naar de gegevens waarin u geïnteresseerd bent. Mongo::Cursor
isan Enumerable
zodat je toegang hebt tot al je gebruikelijke itererende vrienden zoals each
, first
, map
, en een van mijn persoonlijke favorieten, each_with_object
:
a = cursor.each_with_object([]) { |x, a| a.push(mangle(x)) }
Er zijn ook command
en eval
methoden op Mongo::DB
dat zou kunnen doen wat je wilt.