迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 数据库 > MongoDB >

在 MongoDB 中显示索引

作者:迹忆客 最近更新:2023/03/17 浏览次数:

今天,我们将学习如何显示来自一个集合、一个数据库的所有集合以及所有数据库的所有集合的索引。我们还将看到如何从所有数据库的所有集合中获取特定类型的索引。

根据项目需求,我们可以使用以下方式之一在 MongoDB 中显示索引。在本教程中,我们将从特定解决方案到通用解决方案。

在 MongoDB 中使用 getIndexes() 显示来自特定集合的索引

示例代码:

// MongoDB Version 5.0

> db.Client.getIndexes();

输出:

[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_"
        },
        {
                "v" : 2,
                "key" : {
                        "shopPosId" : 1
                },
                "name" : "shopPosId_1"
        }
]

在上面的输出中,我们可以看到两个索引,其中 shopPosId 字段的索引是用户创建的,而 _id默认索引。如果你没有为特定集合创建任何索引,则只会将 _id 视为索引。

为了获得即时的 mongo shell 帮助,我们还可以使用下面给出的任何命令。

// MongoDB Version 5.0

> help;
> db.help();
> db.test.help();

我们还可以使用 stats().indexSizes 来显示特定集合中具有相应大小的索引。

示例代码:

// MongoDB Version 5.0

> db.Client.stats().indexSizes

输出:

{ "_id_" : 36864, "shopPosId_1" : 20480 }

使用 forEach() 显示 MongoDB 数据库中所有集合的索引

示例代码:

// MongoDB Version 5.0

> db.getCollectionNames().forEach(function(collection) {
      all_indexes = db.getCollection(collection).getIndexes();
      print("All Indexes for the " + collection + " collection:");
      printjson(all_indexes);
});

输出:

All Indexes for the Client collection:
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_"
        },
        {
                "v" : 2,
                "key" : {
                        "shopPosId" : 1
                },
                "name" : "shopPosId_1"
        }
]
All Indexes for the Shop collection:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All Indexes for the collection1 collection:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All Indexes for the collection2 collection:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All Indexes for the employee collection:
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_"
        },
        {
                "v" : 2,
                "key" : {
                        "_fts" : "text",
                        "_ftsx" : 1
                },
                "name" : "emp_code_text",
                "weights" : {
                        "emp_code" : 1
                },
                "default_language" : "english",
                "language_override" : "language",
                "textIndexVersion" : 3
        }
]
All Indexes for the printjson collection:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All Indexes for the student_courses collection:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]

此示例代码显示来自当前数据库中所有集合的所有索引。在此代码片段中,getCollectionNames() 方法从所选数据库中检索所有集合名称,这些名称使用 forEach() 一次一个地传递给匿名函数。

forEach() 中,我们获取指定集合的​​所有索引并将它们保存到 all_indexes 对象中。最后,我们使用 printjson() 在控制台上打印 all_indexes 对象(在我们的例子中是 mongo shell)。

显示来自 MongoDB 中所有数据库的所有集合的索引

示例代码:

// MongoDB Version 5.0

> db.adminCommand("listDatabases").databases.forEach(function(database){
      let mdb = db.getSiblingDB(database.name);
      mdb.getCollectionInfos({ type: "collection" }).forEach(function(collection){
          let currentCollection = mdb.getCollection(collection.name);
          let all_indexes = currentCollection.getIndexes();
          print("All indexes on the " + database.name + "." + collection.name + ":");
          printjson(all_indexes)
   });
});

输出:

All indexes on the admin.system.version:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All indexes on the config.system.sessions:
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_"
        },
        {
                "v" : 2,
                "key" : {
                        "lastUse" : 1
                },
                "name" : "lsidTTLIndex",
                "expireAfterSeconds" : 1800
        }
]
All indexes on the local.startup_log:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All indexes on the test.Client:
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_"
        },
        {
                "v" : 2,
                "key" : {
                        "shopPosId" : 1
                },
                "name" : "shopPosId_1"
        }
]
All indexes on the test.Shop:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All indexes on the test.collection1:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All indexes on the test.collection2:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All indexes on the test.employee:
[
        {
                "v" : 2,
                "key" : {
                        "_id" : 1
                },
                "name" : "_id_"
        },
        {
                "v" : 2,
                "key" : {
                        "_fts" : "text",
                        "_ftsx" : 1
                },
                "name" : "emp_code_text",
                "weights" : {
                        "emp_code" : 1
                },
                "default_language" : "english",
                "language_override" : "language",
                "textIndexVersion" : 3
        }
]
All indexes on the test.printjson:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]
All indexes on the test.student_courses:
[ { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_" } ]

上面给出的示例代码将遍历所有数据库。在每个数据库中,它遍历所有集合。

在每个集合中,它获取所有索引并使用它们各自的数据库和集合名称打印它们。

以下是我们用于上述代码片段的所有方法的简要说明。

有没有办法查看特定集合的隐藏索引?是的。我们可以使用 listIndexes 查看它们,如下所示。

这里,Client 是集合名称。你可以将其替换为你的集合名称。

示例代码:

// MongoDB Version 5.0

> db.runCommand (
   {
      listIndexes: "Client"
   }
);

输出:

{
        "cursor" : {
                "id" : NumberLong(0),
                "ns" : "test.Client",
                "firstBatch" : [
                        {
                                "v" : 2,
                                "key" : {
                                        "_id" : 1
                                },
                                "name" : "_id_"
                        },
                        {
                                "v" : 2,
                                "key" : {
                                        "shopPosId" : 1
                                },
                                "name" : "shopPosId_1"
                        }
                ]
        },
        "ok" : 1
}

上面的输出包含 firstBatch,它描述了索引信息,包括用于创建索引的键和选项。从开始 MongoDB 4.4 开始,索引选项 hidden 仅在其值为 true 时才存在。

仅显示 MongoDB 中所有数据库的所有集合中的 text 索引

示例代码:

// MongoDB Version 5.0

> db.adminCommand("listDatabases").databases.forEach(function(database){
      let mdb = db.getSiblingDB(database.name);
      mdb.getCollectionInfos({ type: "collection" }).forEach(function(collection){
          let currentCollection = mdb.getCollection(collection.name);
          currentCollection.getIndexes().forEach(function(index){
          let indexValues = Object.values(Object.assign({}, index.key));

          if (indexValues.includes("text")) {
              print("Text index: " + index.name + " on the " +
                  database.name + "." + collection.name);
              printjson(index);
          };
          });
      });
});

输出:

Text index: emp_code_text on the test.employee
{
        "v" : 2,
        "key" : {
                "_fts" : "text",
                "_ftsx" : 1
        },
        "name" : "emp_code_text",
        "weights" : {
                "emp_code" : 1
        },
        "default_language" : "english",
        "language_override" : "language",
        "textIndexVersion" : 3
}

此代码示例与前一个示例类似,不同之处在于我们仅针对所有数据库的所有集合中的 text 类型索引

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

比较 MongoDB 中的字段

发布时间:2023/04/21 浏览次数:51 分类:MongoDB

在本文中,我们将了解如何比较 MongoDB 中的两个字段。 此外,我们将看到一个相关的示例和解释,以使主题更容易理解。

清除或删除 MongoDB 中的集合

发布时间:2023/04/21 浏览次数:147 分类:MongoDB

本篇文章将告诉大家如何删除 MongoDB 数据库中的集合以及删除 MongoDB 中的集合的不同方法。

MongoDB 截断集合

发布时间:2023/04/21 浏览次数:178 分类:MongoDB

可以根据需要选择两个选项之一来截断下面的集合。 在今天的文章中,我们将学习如何在 MongoDB 中截断集合。

删除 MongoDB 中的重复项

发布时间:2023/04/21 浏览次数:151 分类:MongoDB

在本文中,我们将了解如何删除 MongoDB 中的重复条目,并且我们还将看到一个带有适当解释的示例,以使主题更容易理解。

使用 NodeJS 检查 MongoDB 中是否存在集合

发布时间:2023/04/21 浏览次数:194 分类:MongoDB

在本文中,我们将检查 MongoDB 数据库中是否存在一个集合,并且我们还将查看与主题相关的示例,以使主题更容易理解。 为此,我们将使用 Node.js。

MongoDB 中的唯一索引

发布时间:2023/04/21 浏览次数:144 分类:MongoDB

在这篇教学文章中,您将了解唯一索引、它们是什么以及如何在 MongoDB 中使索引唯一。 此外,还简要详细地解释了使用户的电子邮件在 MongoDB 中唯一。

在 MongoDB 中创建索引

发布时间:2023/04/21 浏览次数:104 分类:MongoDB

索引有助于有效解决查询。 如果没有索引,MongoDB 必须遍历集合中的每个文档才能找到与查询匹配的文档。因此,在今天的文章中,我们将学习如何在 MongoDB 中创建索引。

MongoDB 中的稀疏索引

发布时间:2023/04/21 浏览次数:142 分类:MongoDB

在本文中,我们将讨论 MongoDB 中的稀疏索引。 此外,我们将提供一个相关示例并进行解释,以使该主题更容易理解。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便