Class: Daodalus::DSL::Select

Inherits:
Object
  • Object
show all
Includes:
Clause, Queries
Defined in:
lib/daodalus/dsl/select.rb

Instance Method Summary collapse

Methods included from Queries

#find, #find_one, #select, #where

Methods included from Clause

#to_projection, #to_query, #to_update

Constructor Details

#initialize(dao, query, fields) ⇒ Select

Returns a new instance of Select.



7
8
9
10
11
# File 'lib/daodalus/dsl/select.rb', line 7

def initialize(dao, query, fields)
  @dao   = dao
  @query = query
  @fields = fields
end

Instance Method Details

#by_positionObject Also known as: positional

Raises:



15
16
17
18
# File 'lib/daodalus/dsl/select.rb', line 15

def by_position
  raise InvalidQueryError, "Too many fields for positional operator: #{fields.inspect}" if fields.size > 1
  Select.new(dao, @query.select("#{fields.first}.$" => 1), [])
end

#elem_match(clause) ⇒ Object



30
31
32
# File 'lib/daodalus/dsl/select.rb', line 30

def elem_match clause
  Select.new(dao, @query.select(fields.first.to_s => { '$elemMatch' => clause.to_query}), [])
end

#slice(skip = false, limit) ⇒ Object

Raises:



21
22
23
24
25
26
27
28
# File 'lib/daodalus/dsl/select.rb', line 21

def slice skip=false, limit
  raise InvalidQueryError, "Too many fields for slice operator: #{fields.inspect}" if fields.size > 1
  if skip
    Select.new(dao, @query.select(fields.first.to_s => { '$slice' => [skip, limit]}), [])
  else
    Select.new(dao, @query.select(fields.first.to_s => { '$slice' => limit}), [])
  end
end