MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment lancer des requêtes MongoDB brutes directement dans Ruby

Voici un (éventuellement) meilleur mini-tutoriel sur la façon d'entrer directement dans les entrailles de votre MongoDB. Cela ne résoudra peut-être pas votre problème spécifique, mais cela devrait vous amener jusqu'à la version MongoDB de SELECT * FROM table .

Tout d'abord, vous aurez besoin d'un Mongo::Connection objet. Si vous utilisez MongoMapper, vous pouvez appeler la connection méthode de classe sur l'un de vos modèles MongoMapper pour obtenir une connexion ou demandez-la directement à MongoMapper :

connection = YourMongoModel.connection
connection = MongoMapper.connection

Sinon, je suppose que vous utiliseriez le from_uri constructeur pour construire votre propre connexion.

Ensuite, vous devez mettre la main sur une base de données, vous pouvez le faire en utilisant la notation d'accès au tableau, le db ou récupérez la méthode actuelle directement depuis 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.

Vous avez maintenant un joli Mongo::DB brillant instance entre vos mains.Mais, vous voulez probablement une Collection pour faire quelque chose d'intéressant et vous pouvez l'obtenir en utilisant la notation d'accès au tableau ou la collection méthode :

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

Vous avez maintenant quelque chose qui se comporte un peu comme une table SQL afin que vous puissiez count combien de choses il a ou interrogez-le en utilisant find :

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

Et maintenant vous avez ce que vous recherchez vraiment :une sortie de four bien chaude Mongo::Cursor qui pointe vers les données qui vous intéressent. Mongo::Cursor est un Enumerable vous avez donc accès à tous vos amis d'itération habituels tels que each , first , map , et l'un de mes favoris personnels, each_with_object :

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

Il y a aussi la command et eval méthodes sur Mongo::DB cela pourrait faire ce que vous voulez.