Docs 菜单
Docs 主页
/ / /
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
此特定索引的storage engine的名称。
:version
要使用的索引格式版本。
:default_language
文本索引的默认语言。
:language_override
覆盖默认语言时要使用的字段名称。
:text_version
文本索引存储的版本格式。
:weights
在文本搜索中指定字段和权重的文档。
:sphere_version
2d 球体索引版本。
:bits
设置 2d 索引中纬度和经度的最大边界。
:max
2d 索引中纬度和经度的最大边界。
:min
2d 索引中纬度和经度的最小边界。
:bucket_size
对地理干草堆索引中的位置值进行分组的单位数。
:partial_filter_expression
部分索引的筛选器。
:hidden
一个布尔值,指定是否应隐藏索引;隐藏索引是指集合中存在但查询规划器不会使用的索引。

在 MongoDB Server 版本 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作为最终元素的哈希添加到传递给indexes#create_many的索引数组中。 请注意,此哈希必须是数组中的最后一个元素。

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

要删除索引,请调用indexes#drop_oneindexes#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 的一个版本而异。

后退

集合