Module: Mongoid::Criterion::Exclusion

Included in:
Mongoid::Criteria
Defined in:
lib/mongoid/criterion/exclusion.rb

Overview

This module contains criteria behaviour for exclusion of values.

Instance Method Summary collapse

Instance Method Details

#excludes(attributes = {}) ⇒ Criteria

Adds a criterion to the Criteria that specifies values that are not allowed to match any document in the database. The MongoDB conditional operator that will be used is “$ne”.

Examples:

Match documents without these values.

criteria.excludes(:field => "value1")
criteria.excludes(:field1 => "value1", :field2 => "value1")

Parameters:

  • attributes: (Hash)

    A Hash where the key is the field name and the value is a value that must not be equal to the corresponding field value in the database.

Returns:



21
22
23
24
25
# File 'lib/mongoid/criterion/exclusion.rb', line 21

def excludes(attributes = {})
  mongo_id = attributes.delete(:id)
  attributes = attributes.merge(:_id => mongo_id) if mongo_id
  update_selector(attributes, "$ne")
end

#fields(attributes = nil) ⇒ Criteria

Used when wanting to set the fields options directly using a hash instead of going through only or without.

Examples:

Set the limited fields.

criteria.fields(:field => 1)

Parameters:

  • attributes (Hash) (defaults to: nil)

    The field options.

Returns:

Since:

  • 2.0.2



38
39
40
# File 'lib/mongoid/criterion/exclusion.rb', line 38

def fields(attributes = nil)
  clone.tap { |crit| crit.options[:fields] = attributes || {} }
end

#not_in(attributes) ⇒ Criteria

Adds a criterion to the Criteria that specifies values where none should match in order to return results. This is similar to an SQL “NOT IN” clause. The MongoDB conditional operator that will be used is “$nin”.

Examples:

Match documents with values not in the provided.

criteria.not_in(:field => ["value1", "value2"])
criteria.not_in(:field1 => ["value1", "value2"], :field2 => ["value1"])

Parameters:

  • attributes (Hash)

    A Hash where the key is the field name and the value is an Array of values that none can match.

Returns:



55
56
57
# File 'lib/mongoid/criterion/exclusion.rb', line 55

def not_in(attributes)
  update_selector(attributes, "$nin")
end

#only(*args) ⇒ Criteria

Note:

#only and #without cannot be used together.

Adds a criterion to the Criteria that specifies the fields that will get returned from the Document. Used mainly for list views that do not require all fields to be present. This is similar to SQL “SELECT” values.

Examples:

Limit the fields to only the specified.

criteria.only(:field1, :field2, :field3)

Parameters:

  • args (Array<Symbol>)

    A list of field names to limit to.

Returns:



71
72
73
74
75
76
77
78
79
80
81
# File 'lib/mongoid/criterion/exclusion.rb', line 71

def only(*args)
  clone.tap do |crit|
    if args.any?
      crit.options[:fields] = {:_type => 1}
      crit.field_list = args.flatten
      crit.field_list.each do |f|
        crit.options[:fields][f] = 1
      end
    end
  end
end

#without(*args) ⇒ Criteria

Note:

#only and #without cannot be used together.

Adds a criterion to the Criteria that specifies the fields that will not get returned by the document.

Examples:

Filter out specific fields.

criteria.without(:field2, :field2)

Parameters:

  • Array<Symbol> (Array<Symbol> args A list of fields to exclude.)

    args A list of fields to exclude.

Returns:

Since:

  • 2.0.0



96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/mongoid/criterion/exclusion.rb', line 96

def without(*args)
  clone.tap do |crit|
    if args.any?
      unless args == [ :id ] || args == [ :_id ]
        crit.options[:fields] = {}
      end
      args.flatten.each do |f|
        crit.options[:fields][f] = 0
      end
    end
  end
end