MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come eseguire query MongoDB grezze direttamente in Ruby

Ecco un mini-tutorial (forse) migliore su come entrare direttamente nelle viscere del tuo MongoDB. Questo potrebbe non risolvere il tuo problema specifico, ma dovrebbe portarti fino alla versione MongoDB di SELECT * FROM table .

Prima di tutto, vorrai un Mongo::Connection oggetto. Se stai usando MongoMapper, puoi chiamare la connection class su uno qualsiasi dei tuoi modelli MongoMapper per ottenere una connessione o chiedilo direttamente a MongoMapper:

connection = YourMongoModel.connection
connection = MongoMapper.connection

Altrimenti immagino che useresti from_uri costruttore per creare la tua connessione.

Quindi devi mettere le mani su un database, puoi farlo usando la notazione di accesso all'array, il db metodo o ottieni quello corrente direttamente da 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.

Ora hai un bel brillante Mongo::DB istanza nelle tue mani. Ma probabilmente vorrai una Collection per fare qualcosa di interessante e puoi ottenerlo usando la notazione di accesso all'array o la collection metodo:

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

Ora hai qualcosa che si comporta come una tabella SQL in modo da poter count quante cose ha o interrogalo usando find :

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

E ora hai quello che cerchi davvero:un caldo fuori dal forno Mongo::Cursor che punta ai dati che ti interessano. Mongo::Cursor è un Enumerable così hai accesso a tutti i tuoi soliti amici iterativi come each , first , map e uno dei miei preferiti personali, each_with_object :

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

Ci sono anche command e eval metodi su Mongo::DB potrebbe fare quello che vuoi.