module Mongoid::Tasks::Database
Public Instance Methods
Create indexes for each model given the provided globs and the class is not embedded.
@example Create all the indexes.
Mongoid::Tasks::Database.create_indexes
@return [ Array<Class> ] The indexed models.
@since 2.1.0
# File lib/mongoid/tasks/database.rb, line 16 def create_indexes(models = ::Mongoid.models) models.each do |model| next if model.index_specifications.empty? if !model.embedded? || model.cyclic? model.create_indexes logger.info("MONGOID: Created indexes on #{model}:") model.index_specifications.each do |spec| logger.info("MONGOID: Index: #{spec.key}, Options: #{spec.options}") end model else logger.info("MONGOID: Index ignored on: #{model}, please define in the root model.") nil end end.compact end
Remove indexes for each model given the provided globs and the class is not embedded.
@example Remove all the indexes.
Mongoid::Tasks::Database.remove_indexes
@return [ Array<Class> ] The un-indexed models.
# File lib/mongoid/tasks/database.rb, line 96 def remove_indexes(models = ::Mongoid.models) models.each do |model| next if model.embedded? begin model.remove_indexes rescue Mongo::Error::OperationFailure next end model end.compact end
Remove indexes that exist in the database but aren't specified on the models.
@example Remove undefined indexes.
Mongoid::Tasks::Database.remove_undefined_indexes
@return [ Hash{Class => Array(Hash)}] The list of indexes that were removed by model.
@since 4.0.0
# File lib/mongoid/tasks/database.rb, line 74 def remove_undefined_indexes(models = ::Mongoid.models) undefined_indexes(models).each do |model, indexes| indexes.each do |index| key = index['key'].symbolize_keys collection = model.collection collection.indexes.drop_one(key) logger.info( "MONGOID: Removed index '#{index['name']}' on collection " + "'#{collection.name}' in database '#{collection.database.name}'." ) end end end
Return the list of indexes by model that exist in the database but aren't specified on the models.
@example Return the list of unused indexes.
Mongoid::Tasks::Database.undefined_indexes
@return Hash{Class => Array(Hash)} The list of undefined indexes by model.
# File lib/mongoid/tasks/database.rb, line 40 def undefined_indexes(models = ::Mongoid.models) undefined_by_model = {} models.each do |model| unless model.embedded? begin model.collection.indexes.each do |index| # ignore default index unless index['name'] == '_id_' key = index['key'].symbolize_keys spec = model.index_specification(key, index['name']) unless spec # index not specified undefined_by_model[model] ||= [] undefined_by_model[model] << index end end end rescue Mongo::Error::OperationFailure; end end end undefined_by_model end
Private Instance Methods
# File lib/mongoid/tasks/database.rb, line 109 def logger Mongoid.logger end