MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como disparar consultas brutas do MongoDB diretamente em Ruby


Aqui está um mini-tutorial (possivelmente) melhor sobre como entrar diretamente nas entranhas do seu MongoDB. Isso pode não resolver seu problema específico, mas deve levá-lo até a versão MongoDB de SELECT * FROM table .

Primeiro de tudo, você vai querer um Mongo::Connection objeto. Se você estiver usando o MongoMapper, poderá chamar a connection class em qualquer um dos seus modelos MongoMapper para obter uma conexão ou peça diretamente ao MongoMapper:
connection = YourMongoModel.connection
connection = MongoMapper.connection

Caso contrário, acho que você usaria o from_uri construtor para construir sua própria conexão.

Então você precisa colocar as mãos em um banco de dados, você pode fazer isso usando a notação de acesso ao array, o db ou obtenha o atual direto do 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.

Agora você tem um belo e brilhante Mongo::DB instância em suas mãos. Mas, você provavelmente quer uma Collection para fazer qualquer coisa interessante e você pode obter isso usando a notação de acesso de matriz ou a collection método:
collection = db['collection_name']
collection = db.collection('collection_name')

Agora você tem algo que se comporta como uma tabela SQL para que você possa count quantas coisas ele tem ou consulte usando find :
cursor = collection.find(:key => 'value')
cursor = collection.find({:key => 'value'}, :fields => ['just', 'these', 'fields'])
# etc.

E agora você tem o que realmente procura:um quentinho saindo do forno Mongo::Cursor que aponta para os dados nos quais você está interessado. Mongo::Cursor isan Enumerable para que você tenha acesso a todos os seus amigos iterativos habituais, como each , first , map , e um dos meus favoritos pessoais, each_with_object :
a = cursor.each_with_object([]) { |x, a| a.push(mangle(x)) }

Existem também command e eval métodos em Mongo::DB que pode fazer o que você quer.