Class: Mongoid::Criteria
- Inherits:
-
Object
- Object
- Mongoid::Criteria
- Defined in:
- lib/locomotive/mongoid/patches.rb,
lib/locomotive/mongoid/patches.rb
Overview
FIXME: the Origin (used by Steam) and Mongoid gems both modify the Symbol class to allow writing queries like .where(:position.lt => 1) By convention, Origin::Key will be the one. So we need to make sure it doesn’t break the Mongoid queries.
Defined Under Namespace
Modules: Queryable
Instance Method Summary collapse
- #each_by(by, &block) ⇒ Object
- #first! ⇒ Object
-
#indexed_max(field) ⇒ Object
Optimized version of the max aggregate method.
- #to_liquid ⇒ Object
- #without_sorting ⇒ Object
Instance Method Details
#each_by(by, &block) ⇒ Object
137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/locomotive/mongoid/patches.rb', line 137 def each_by(by, &block) idx = total = 0 set_limit = [:limit] while ((results = ordered_clone.limit(by).skip(idx)) && results.any?) results.each do |result| return self if set_limit and set_limit >= total total += 1 yield result end idx += by end self end |
#first! ⇒ Object
124 125 126 127 128 129 130 |
# File 'lib/locomotive/mongoid/patches.rb', line 124 def first! self.first.tap do |model| if model.nil? raise Mongoid::Errors::DocumentNotFound.new(self.klass, self.selector) end end end |
#indexed_max(field) ⇒ Object
Optimized version of the max aggregate method. It works efficiently only if the field is part of a MongoDB index. more here: stackoverflow.com/questions/4762980/getting-the-highest-value-of-a-column-in-mongodb
154 155 156 157 158 159 160 161 162 |
# File 'lib/locomotive/mongoid/patches.rb', line 154 def indexed_max(field) _criteria = criteria.order_by(field.to_sym.desc).only(field.to_sym) selector = _criteria.send(:selector_with_type_selection) fields = _criteria.[:fields] sort = _criteria.[:sort] document = collection.find(selector).projection(fields).sort(sort).limit(1).first document ? document[field.to_s].to_i : nil end |
#to_liquid ⇒ Object
164 165 166 |
# File 'lib/locomotive/mongoid/patches.rb', line 164 def to_liquid Locomotive::Liquid::Drops::ProxyCollection.new(self) end |
#without_sorting ⇒ Object
132 133 134 |
# File 'lib/locomotive/mongoid/patches.rb', line 132 def without_sorting clone.tap { |crit| crit..delete(:sort) } end |