module Mongoid::Tasks::Database

Public Instance Methods

create_indexes(models = ::Mongoid.models) click to toggle source

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(models = ::Mongoid.models) click to toggle source

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_undefined_indexes(models = ::Mongoid.models) click to toggle source

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
undefined_indexes(models = ::Mongoid.models) click to toggle source

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

logger() click to toggle source
# File lib/mongoid/tasks/database.rb, line 109
def logger
  Mongoid.logger
end