5

Is there some sort of find_by_sql equivalent for mongoid, where you pass a mongo query and it materializes Mongoid::Document s from the results?

Matt Briggs
  • 41,224
  • 16
  • 95
  • 126

2 Answers2

8

Mongoid wraps the Collection object to return objects of the proper class.

So, if User is a Mongoid model:

cursor = User.collection.find({}, {}) # Just like the Ruby driver...
records = cursor.to_a # An array of User objects

Edit to add: It actually wraps Mongo's Cursor class too. See here:

def each
  @cursor.each do |document|
    yield Mongoid::Factory.build(@klass, document)
  end
end
PreciousBodilyFluids
  • 11,881
  • 3
  • 37
  • 44
2

If you're using Mongoid 3, it provides easy access to its MongoDB driver: Moped. Here's an example of accessing some raw data without using Models to access the data:

db = Mongoid::Sessions.default
collection = db[:collection_name]

# finding a document
doc = collection.find(name: 'my new document').first

collection.find.each do |document|
  puts document.inspect
end
Andrew
  • 227,796
  • 193
  • 515
  • 708