sql >> Database >  >> NoSQL >> MongoDB

Hoe onbewerkte MongoDB-query's rechtstreeks in Ruby te vuren

Hier is een (mogelijk) betere mini-tutorial over hoe je direct in het lef van je MongoDB kunt komen. Dit lost uw specifieke probleem misschien niet op, maar het zou u zo ver moeten brengen als de MongoDB-versie van SELECT * FROM table .

Allereerst wil je een Mongo::Connection voorwerp. Als u MongoMapper gebruikt, kunt u de connection . bellen class-methode op al uw MongoMapper-modellen om een ​​verbinding te krijgen of vraag MongoMapper er rechtstreeks om:

connection = YourMongoModel.connection
connection = MongoMapper.connection

Anders zou je denk ik de from_uri . gebruiken constructor om je eigen verbinding te bouwen.

Dan moet u een database in handen krijgen, u kunt dit doen met behulp van de array-toegangsnotatie, de db methode, of haal de huidige rechtstreeks van 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.

Nu heb je een mooie glanzende Mongo::DB exemplaar in uw handen. Maar u wilt waarschijnlijk een Collection om iets interessants te doen en je kunt dat krijgen met behulp van de array-toegangsnotatie of decollection methode:

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

Nu heb je iets dat zich gedraagt ​​als een SQL-tabel, dus je kunt count hoeveel dingen het heeft of zoek het op met find :

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

En nu heb je waar je echt naar op zoek bent:een hete uit de oven Mongo::Cursor die verwijst naar de gegevens waarin u geïnteresseerd bent. Mongo::Cursor isan Enumerable zodat je toegang hebt tot al je gebruikelijke itererende vrienden zoals each , first , map , en een van mijn persoonlijke favorieten, each_with_object :

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

Er zijn ook command en eval methoden op Mongo::DB dat zou kunnen doen wat je wilt.



  1. Hernoem een ​​veld in de queryresultaten in MongoDB

  2. Mongodb $lookup dynamische collectie

  3. Hoogwaardige MongoDB-clusters op Azure

  4. Probleem bij het retourneren van gegevens die zijn opgehaald uit DB-query's die in de lus worden aangeroepen