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?
Asked
Active
Viewed 1,473 times
2 Answers
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
-
that is absolutely amazing! do you know how the mongo driver knows to materialize my mongoid class? – Matt Briggs Sep 16 '10 at 20:48
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