MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So feuern Sie unformatierte MongoDB-Abfragen direkt in Ruby ab

Hier ist ein (möglicherweise) besseres Mini-Tutorial, wie Sie direkt in die Eingeweide Ihrer MongoDB gelangen. Dies löst möglicherweise nicht Ihr spezifisches Problem, aber es sollte Sie bis zur MongoDB-Version von SELECT * FROM table bringen .

Als erstes benötigen Sie eine Mongo::Connection Objekt. Wenn Sie MongoMapper verwenden, können Sie die connection aufrufen Klassenmethode auf einem Ihrer MongoMapper-Modelle, um eine Verbindung zu erhalten, oder fragen Sie MongoMapper direkt danach:

connection = YourMongoModel.connection
connection = MongoMapper.connection

Andernfalls würden Sie vermutlich den from_uri verwenden Konstruktor, um Ihre eigene Verbindung aufzubauen.

Dann müssen Sie sich eine Datenbank besorgen, Sie können dies mit der Array-Zugriffsnotation, der db, tun -Methode oder holen Sie sich die aktuelle direkt von 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.

Jetzt haben Sie eine schön glänzende Mongo::DB Instanz in Ihren Händen. Aber wahrscheinlich möchten Sie eine Collection um irgendetwas Interessantes zu tun, und Sie können dies entweder mit der Array-Zugriffsnotation oder der Collection erreichen Methode:

collection = db['collection_name']
collection = db.collection('collection_name')

Jetzt haben Sie etwas, das sich wie eine SQL-Tabelle verhält, sodass Sie count können wie viele Dinge es hat oder fragen Sie es mit find ab :

cursor = collection.find(:key => 'value')
cursor = collection.find({:key => 'value'}, :fields => ['just', 'these', 'fields'])
# etc.

Und jetzt haben Sie, wonach Sie wirklich suchen:einen heißen Mongo::Cursor aus dem Ofen das zeigt auf die Daten, an denen Sie interessiert sind. Mongo::Cursor ist ein Enumerable so haben Sie Zugriff auf alle Ihre üblichen Iterationsfreunde wie each , first , map , und einer meiner persönlichen Favoriten, each_with_object :

a = cursor.each_with_object([]) { |x, a| a.push(mangle(x)) }

Es gibt auch command und eval Methoden auf Mongo::DB das könnte tun, was Sie wollen.