sql >> Base de Datos >  >> NoSQL >> MongoDB

Cómo disparar consultas sin procesar de MongoDB directamente en Ruby

Aquí hay un minitutorial (posiblemente) mejor sobre cómo llegar directamente a las entrañas de su MongoDB. Es posible que esto no resuelva su problema específico, pero debería llevarlo a la versión MongoDB de SELECT * FROM table .

En primer lugar, querrás una Mongo::Connection objeto. Si está utilizando MongoMapper, puede llamar a la connection método de clase en cualquiera de sus modelos MongoMapper para obtener una conexión o solicitarla directamente a MongoMapper:

connection = YourMongoModel.connection
connection = MongoMapper.connection

De lo contrario, supongo que usarías el from_uri constructor para construir su propia conexión.

Entonces necesita tener en sus manos una base de datos, puede hacerlo usando la notación de acceso a la matriz, el db u obtenga el actual directamente de 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.

Ahora tienes un lindo y brillante Mongo::DB instancia en tus manos. Pero, probablemente quieras una Collection para hacer algo interesante y puede obtenerlo usando la notación de acceso a la matriz o la collection método:

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

Ahora tiene algo que se comporta como una tabla SQL para que pueda count cuántas cosas tiene o consulta usando find :

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

Y ahora tienes lo que realmente buscas:algo recién salido del horno Mongo::Cursor que apunta a los datos que le interesan. Mongo::Cursor es un Enumerable para que tenga acceso a todos sus iteratingfriends habituales, como each , first , map , y uno de mis favoritos personales, each_with_object :

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

También hay command y eval métodos en Mongo::DB eso podría hacer lo que quieras.