文档菜单
文档首页
/ / /
Ruby MongoDB 驱动
/

索引

本页内容

  • 创建索引
  • 删除索引
  • 列出索引

驱动器提供了通过索引属性在集合上创建、删除和查看indexes

client = Mongo::Client.new([ '127.0.0.1:27017' ], database: 'music')
client[:bands].indexes
# => #<Mongo::Index::View:0x000055e2822b9318 @collection=#<Mongo::Collection:0x660 namespace=music.bands>, @batch_size=nil, @options={}>

索引可以逐个创建,也可以在单个操作中创建多个。在 MongoDB 3.0 及更高版本中创建多个索引时,索引并行创建;在早期版本中按顺序创建。

要创建单个索引,请使用 indexes#create_one,将键规范作为第一个参数,将选项作为第二个参数传递

client[:bands].indexes.create_one(genre: 1)
client[:bands].indexes.create_one(
{ name: 1 },
unique: true, expire_after: 120,
)

要创建多个索引,请使用indexes#create_many,它接受一个索引规范的数组。与create_one不同,每个索引规范都是一个哈希表,其中key键映射到键规范,而选项则在顶级指定。

client[:bands].indexes.create_many([
{ key: { genre: 1 } },
{ key: { name: 1 }, unique: true, expire_after: 120 },
])

以下是在创建索引时可以添加的所有选项的完整列表。这些选项反映了由createIndex命令支持的选择。

选项
描述
:background
可以是truefalse。指示索引在后台创建。
:expire_after
文档在集合中过期的秒数。
:name
索引的名称。
:sparse
指示索引是否应该是稀疏的,可以是truefalse
:storage_engine
此特定索引的存储引擎名称。
:version
要使用的索引格式版本。
:default_language
文本索引的默认语言。
:language_override
用于覆盖默认语言的字段名称。
:text_version
文本索引存储的版本格式。
:weights
指定文本搜索中的字段和权重。
:sphere_version
2d球面索引版本。
:bits
设置2d索引中纬度和经度的最大边界。
:max
2d索引中纬度和经度的最大边界。
:min
2d索引中纬度和经度的最小边界。
:bucket_size
在地理haystack索引中按位置值分组时的单元数量。
:partial_filter_expression
部分索引的过滤器。
:hidden
一个布尔值,指定索引是否应该被隐藏;隐藏的索引是存在于集合中但不会被查询计划器使用的索引。

在MongoDB服务器版本4.4及更高版本中,可以在创建索引时指定:commit_quorum选项。此选项与其他索引选项不同,因为它确定索引创建期间的服务器行为,而不是确定单个索引的行为。

:commit_quorum 选项指定在索引准备就绪之前,副本集中多少个投票、承载数据的成员必须完成索引构建。可能的值是整数(从0到副本集中投票、承载数据的成员数),"majority",或"votingMembers"。

在创建一个索引时指定 :commit_quorum,请将另一个选项添加到 indexes#create_one 方法的第二个参数。

client[:bands].indexes.create_one(
{ name: 1 },
unique: true, expire_after: 120, commit_quorum: 'majority'
)

在创建多个索引时指定创建选项,请将一个包含 :commit_quorum 的 Hash 添加到传递给 indexes#create_many 的索引数组的末尾。注意,这个 Hash 必须是数组的最后一个元素。

client[:bands].indexes.create_many([
{ key: { genre: 1 } },
{ key: { name: 1 }, unique: true, expire_after: 120 },
{ commit_quorum: 'majority' },
])

要删除索引,请调用 indexes#drop_one 或 indexes#drop_all。

# Drops the name_1 index.
client[:bands].indexes.drop_one( 'name_1' )
# Drops all indexes in the collection.
client[:bands].indexes.drop_all

要列出索引,遍历 indexes 对象。

client[:bands].indexes.each do |index_spec|
p index_spec
# {"v"=>2, "key"=>{"_id"=>1}, "name"=>"_id_"}
# {"v"=>2, "key"=>{"genre"=>1}, "name"=>"genre_1"}
# {"v"=>2, "unique"=>true, "key"=>{"name"=>1}, "name"=>"name_1",
# "expireAfterSeconds"=>120}
end

每次迭代返回由 listIndexes 命令返回的索引规范。

注意

此方法返回的索引规范的结构和内容可能从 MongoDB 的一个版本到另一个版本发生变化。

返回

集合