Module: Mongoid::Indexable::ClassMethods
- Defined in:
- lib/mongoid/indexable.rb
Instance Method Summary collapse
-
#add_indexes ⇒ true
Add the default indexes to the root document if they do not already exist.
-
#create_indexes ⇒ true
Send the actual index creation comments to the MongoDB driver.
-
#index(spec, options = nil) ⇒ Hash
Adds an index definition for the provided single or compound keys.
-
#index_specification(index_hash, index_name = nil) ⇒ Specification
Get an index specification for the provided key.
-
#remove_indexes ⇒ true
Send the actual index removal comments to the MongoDB driver, but lets _id untouched.
Instance Method Details
#add_indexes ⇒ true
Add the default indexes to the root document if they do not already exist. Currently this is only _type.
72 73 74 75 76 77 |
# File 'lib/mongoid/indexable.rb', line 72 def add_indexes if hereditary? && !index_keys.include?(discriminator_key.to_sym => 1) index({ discriminator_key.to_sym => 1 }, unique: false, background: true) end true end |
#create_indexes ⇒ true
Send the actual index creation comments to the MongoDB driver
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/mongoid/indexable.rb', line 24 def create_indexes return unless index_specifications = { background: Config.background_indexing } index_specifications.each do |spec| key, = spec.key, .merge(spec.) if database = [:database] with(database: database) do |klass| klass.collection.indexes(session: _session).create_one(key, .except(:database)) end else collection.indexes(session: _session).create_one(key, ) end end and true end |
#index(spec, options = nil) ⇒ Hash
Adds an index definition for the provided single or compound keys.
92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/mongoid/indexable.rb', line 92 def index(spec, = nil) specification = Specification.new(self, spec, ) # the equality test for Indexable::Specification instances does not # consider any options, which means names are not compared. This means # that an index with different options from another, and a different # name, will be silently ignored unless duplicate index declarations # are allowed. return unless Mongoid.allow_duplicate_index_declarations || !index_specifications.include?(specification) index_specifications.push(specification) end |
#index_specification(index_hash, index_name = nil) ⇒ Specification
Get an index specification for the provided key.
114 115 116 117 118 |
# File 'lib/mongoid/indexable.rb', line 114 def index_specification(index_hash, index_name = nil) index_specifications.detect do |spec| spec.superficial_match?(key: index_hash, name: index_name) end end |
#remove_indexes ⇒ true
Send the actual index removal comments to the MongoDB driver, but lets _id untouched.
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/mongoid/indexable.rb', line 48 def remove_indexes indexed_database_names.each do |database| with(database: database) do |klass| klass.collection.indexes(session: _session).each do |spec| next if spec['name'] == '_id_' klass.collection.indexes(session: _session).drop_one(spec['key']) logger.info( "MONGOID: Removed index '#{spec['name']}' on collection " + "'#{klass.collection.name}' in database '#{database}'." ) end rescue Mongo::Error::OperationFailure end end and true end |