在MongoDB中取消隐藏索引的2种方法
如果在MongoDB中有一个隐藏索引,则可以使用该方法或管理命令来取消隐藏它。unhideIndex()``collMod
示例索引
让我们看一下名为 的集合上的索引:pets
db.pets.getIndexes()
输出:
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"weight" : -1
},
"name" : "idx_weight_-1",
"hidden" : true
},
{
"v" : 2,
"hidden" : true,
"key" : {
"type" : 1
},
"name" : "type_1"
}
]我们可以看到有三个索引,最后两个是隐藏的。我们知道这一点,因为它们的定义中有。"hidden" : true
使用方法取消隐藏unhideIndexes()
取消隐藏索引的第一种方法是使用该方法。此方法接受索引的名称或其键模式作为参数,以指定要取消隐藏的索引。db.collection.unhideIndex()
例:
db.pets.unhideIndex("idx_weight_-1")
输出:
{ “hidden_old” : true, “hidden_new” : false, “ok” : 1 }
该方法的输出显示字段的旧值(在本例中)和新值(在本例中)。unhideIndex()``hidden``true``false
但是,如果我们取消隐藏已经未隐藏的索引(或隐藏已经隐藏的索引),则不会显示这些索引,我们只会得到以下内容:
{ “ok” : 1 }
无论如何,索引现在都是未隐藏的。
该方法是管理命令的包装器(如下)。unhideIndex()``collMod
命令collMod
管理命令使我们能够向集合添加选项或修改视图定义。collMod
我们可以使用它来取消隐藏索引,方法是传递:hidden: false
例:
db.runCommand( {
collMod: "pets",
index: {
name: "type_1",
hidden: false
}
} )
输出:
{ "hidden_old" : true, "hidden_new" : false, "ok" : 1 }这将返回的同一文档。unhideIndex()
与 类似,您可以选择指定索引名称或其键模式。unhideIndex()
下面是使用密钥模式的示例:
db.runCommand( {
collMod: "pets",
index: {
keyPattern: { "type" : 1 },
hidden: false
}
} )
在本例中,索引是使用 定义的,因此可以使用此定义代替索引名称。{ "type" : 1 }
验证更改
为了验证我们的更改,我们可以再次调用以查看索引的定义:getIndexes()
db.pets.getIndexes()
输出:
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_"
},
{
"v" : 2,
"key" : {
"weight" : -1
},
"name" : "idx_weight_-1"
},
{
"v" : 2,
"key" : {
"type" : 1
},
"name" : "type_1"
}
]正如预期的那样,这两个索引都已取消隐藏。我们也可以通过 .hidden: true
无法隐藏/取消隐藏索引?检查此设置。
必须至少在隐藏索引之前。但是,一旦隐藏,即使在MongoDB 4.4二进制文件上设置为4.2,索引也将保持隐藏状态。mongod``featureCompatibilityVersion``4.4``featureCompatibilityVersion
您可以使用以下代码检查功能兼容性版本设置:
db.adminCommand(
{
getParameter: 1,
featureCompatibilityVersion: 1
}
)
您可以使用以下命令进行设置:setFeatureCompatibilityVersion
db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )
该命令需要在数据库中运行。setFeatureCompatibilityVersion``admin
另请注意,不能隐藏索引。_id