Class: Mongo::Index::View

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
Enumerable, Retryable
Defined in:
build/ruby-driver-v2.19/lib/mongo/index/view.rb

Overview

A class representing a view of indexes.

Since:

  • 2.0.0

Constant Summary collapse

KEY =

The index key field.

Since:

  • 2.0.0

'key'.freeze
NAME =

The index name field.

Since:

  • 2.0.0

'name'.freeze
OPTIONS =

The mappings of Ruby index options to server options.

Since:

  • 2.0.0

{
  :background => :background,
  :bits => :bits,
  :bucket_size => :bucketSize,
  :default_language => :default_language,
  :expire_after => :expireAfterSeconds,
  :expire_after_seconds => :expireAfterSeconds,
  :key => :key,
  :language_override => :language_override,
  :max => :max,
  :min => :min,
  :name => :name,
  :partial_filter_expression => :partialFilterExpression,
  :sparse => :sparse,
  :sphere_version => :'2dsphereIndexVersion',
  :storage_engine => :storageEngine,
  :text_version => :textIndexVersion,
  :unique => :unique,
  :version => :v,
  :weights => :weights,
  :collation => :collation,
  :comment => :comment,
  :wildcard_projection => :wildcardProjection,
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Retryable

#read_worker, #select_server, #write_worker

Constructor Details

#initialize(collection, options = {}) ⇒ View

Create the new index view.

Examples:

Create the new index view.

View::Index.new(collection)

Parameters:

  • collection (Collection)

    The collection.

  • options (Hash) (defaults to: {})

    Options for getting a list of indexes. Only relevant for when the listIndexes command is used with server versions >=2.8.

Options Hash (options):

  • :batch_size (Integer)

    The batch size for results returned from the listIndexes command.

Since:

  • 2.0.0



293
294
295
296
297
# File 'build/ruby-driver-v2.19/lib/mongo/index/view.rb', line 293

def initialize(collection, options = {})
  @collection = collection
  @batch_size = options[:batch_size]
  @options = options
end

Instance Attribute Details

#batch_sizeInteger (readonly)

Returns batch_size The size of the batch of results when sending the listIndexes command.

Returns:

  • (Integer)

    batch_size The size of the batch of results when sending the listIndexes command.

Since:

  • 2.0.0



34
35
36
# File 'build/ruby-driver-v2.19/lib/mongo/index/view.rb', line 34

def batch_size
  @batch_size
end

#collectionCollection (readonly)

Returns collection The indexes collection.

Returns:

  • (Collection)

    collection The indexes collection.

Since:

  • 2.0.0



30
31
32
# File 'build/ruby-driver-v2.19/lib/mongo/index/view.rb', line 30

def collection
  @collection
end

Instance Method Details

#create_many(*models) ⇒ Result

Note:

On MongoDB 3.0.0 and higher, the indexes will be created in parallel on the server.

Creates multiple indexes on the collection.

Examples:

Create multiple indexes.

view.create_many([
  { key: { name: 1 }, unique: true },
  { key: { age: -1 }, background: true }
])

Create multiple indexes with options.

view.create_many(
  { key: { name: 1 }, unique: true },
  { key: { age: -1 }, background: true },
  { commit_quorum: 'majority' }
)

Parameters:

  • models (Array<Hash>)

    The index specifications. Each model MUST include a :key option, except for the last item in the Array, which may be a Hash specifying options relevant to the createIndexes operation. The following options are accepted:

    • commit_quorum: Specify how many data-bearing members of a replica set, including the primary, must complete the index builds successfully before the primary marks the indexes as ready. Potential values are:

      • an integer from 0 to the number of members of the replica set

      • “majority” indicating that a majority of data bearing nodes must vote

      • “votingMembers” which means that all voting data bearing nodes must vote

    • session: The session to use.

    • comment: A user-provided comment to attach to this command.

Returns:

  • (Result)

    The result of the command.

Since:

  • 2.0.0



206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
# File 'build/ruby-driver-v2.19/lib/mongo/index/view.rb', line 206

def create_many(*models)
  models = models.flatten
  options = {}
  if models && !models.last.key?(:key)
    options = models.pop
  end

  client.send(:with_session, @options.merge(options)) do |session|
    server = next_primary(nil, session)

    indexes = normalize_models(models, server)
    indexes.each do |index|
      if index[:bucketSize] || index['bucketSize']
        client.log_warn("Haystack indexes (bucketSize index option) are deprecated as of MongoDB 4.4")
      end
    end

    spec = {
      indexes: indexes,
      db_name: database.name,
      coll_name: collection.name,
      session: session,
      commit_quorum: options[:commit_quorum],
      write_concern: write_concern,
      comment: options[:comment],
    }

    Operation::CreateIndex.new(spec).execute(server, context: Operation::Context.new(client: client, session: session))
  end
end

#create_one(keys, options = {}) ⇒ Result

Note:

Note that the options listed may be subset of those available.

Creates an index on the collection.

See the MongoDB documentation for a full list of supported options by server version.

Examples:

Create a unique index on the collection.

view.create_one({ name: 1 }, { unique: true })

Parameters:

  • keys (Hash)

    A hash of field name/direction pairs.

  • options (Hash) (defaults to: {})

    Options for this index.

Options Hash (options):

  • :unique (true, false) — default: false

    If true, this index will enforce a uniqueness constraint on that field.

  • :background (true, false) — default: false

    If true, the index will be built in the background (only available for server versions >= 1.3.2 )

  • :drop_dups (true, false) — default: false

    If creating a unique index on this collection, this option will keep the first document the database indexes and drop all subsequent documents with duplicate values on this field.

  • :bucket_size (Integer) — default: nil

    For use with geoHaystack indexes. Number of documents to group together within a certain proximity to a given longitude and latitude.

  • :max (Integer) — default: nil

    Specify the max latitude and longitude for a geo index.

  • :min (Integer) — default: nil

    Specify the min latitude and longitude for a geo index.

  • :partial_filter_expression (Hash)

    Specify a filter for a partial index.

  • :hidden (Boolean)

    When :hidden is true, this index will exist on the collection but not be used by the query planner when executing operations.

  • :commit_quorum (String | Integer)

    Specify how many data-bearing members of a replica set, including the primary, must complete the index builds successfully before the primary marks the indexes as ready. Potential values are:

    • an integer from 0 to the number of members of the replica set

    • “majority” indicating that a majority of data bearing nodes must vote

    • “votingMembers” which means that all voting data bearing nodes must vote

  • :session (Session)

    The session to use for the operation.

  • :comment (Object)

    A user-provided comment to attach to this command.

Returns:

  • (Result)

    The response.

Since:

  • 2.0.0



157
158
159
160
161
162
163
164
165
166
167
168
169
170
# File 'build/ruby-driver-v2.19/lib/mongo/index/view.rb', line 157

def create_one(keys, options = {})
  options = options.dup

  create_options = {}
  if session = @options[:session]
    create_options[:session] = session
  end
  %i(commit_quorum session comment).each do |key|
    if value = options.delete(key)
      create_options[key] = value
    end
  end
  create_many({ key: keys }.merge(options), create_options)
end

#drop_all(options = {}) ⇒ Result

Drop all indexes on the collection.

Examples:

Drop all indexes on the collection.

view.drop_all

Parameters:

  • options (Hash) (defaults to: {})

    Options for this operation.

Options Hash (options):

  • :comment (Object)

    A user-provided comment to attach to this command.

Returns:

  • (Result)

    The response.

Since:

  • 2.0.0



109
110
111
# File 'build/ruby-driver-v2.19/lib/mongo/index/view.rb', line 109

def drop_all(options = {})
  drop_by_name(Index::ALL, comment: options[:comment])
end

#drop_one(name, options = {}) ⇒ Result

Drop an index by its name.

Examples:

Drop an index by its name.

view.drop_one('name_1')

Parameters:

  • name (String)

    The name of the index.

  • options (Hash) (defaults to: {})

    Options for this operation.

Options Hash (options):

  • :comment (Object)

    A user-provided comment to attach to this command.

Returns:

  • (Result)

    The response.

Raises:

Since:

  • 2.0.0



91
92
93
94
# File 'build/ruby-driver-v2.19/lib/mongo/index/view.rb', line 91

def drop_one(name, options = {})
  raise Error::MultiIndexDrop.new if name == Index::ALL
  drop_by_name(name, comment: options[:comment])
end

#each(&block) ⇒ Object

Iterate over all indexes for the collection.

Examples:

Get all the indexes.

view.each do |index|
  ...
end

Since:

  • 2.0.0



265
266
267
268
269
270
271
272
273
274
275
276
277
# File 'build/ruby-driver-v2.19/lib/mongo/index/view.rb', line 265

def each(&block)
  session = client.send(:get_session, @options)
  cursor = read_with_retry_cursor(session, ServerSelector.primary, self) do |server|
    send_initial_query(server, session)
  end
  if block_given?
    cursor.each do |doc|
      yield doc
    end
  else
    cursor.to_enum
  end
end

#get(keys_or_name) ⇒ Hash

Convenience method for getting index information by a specific name or spec.

Examples:

Get index information by name.

view.get('name_1')

Get index information by the keys.

view.get(name: 1)

Parameters:

  • keys_or_name (Hash, String)

    The index name or spec.

Returns:

  • (Hash)

    The index information.

Since:

  • 2.0.0



251
252
253
254
255
# File 'build/ruby-driver-v2.19/lib/mongo/index/view.rb', line 251

def get(keys_or_name)
  find do |index|
    (index[NAME] == keys_or_name) || (index[KEY] == normalize_keys(keys_or_name))
  end
end