MongoDB额外收藏

squ*_*oid 5 database mongodb mongodb-query

我有一个名为index的数据库只有一个名为student的集合.

当我解雇查询 db.students.find({}).count()

它显示了1000000个文档.

但是当我使用db.stats()它显示结果如: -

{
        "db" : "index",
        "collections" : 3,
        "objects" : 1000004,
        "avgObjSize" : 59.95997216011136,
        "dataSize" : 59960212,
        "storageSize" : 87420928,
        "numExtents" : 14,
        "indexes" : 1,
        "indexSize" : 32458720,
        "fileSize" : 520093696,
        "nsSizeMB" : 16,
        "ok" : 1
}
Run Code Online (Sandbox Code Playgroud)
  1. 3个收藏怎么样?

  2. 对象1000004中没有4个额外的预期?

最后我做了db.getCollectionNames()[ "student", "system.indexes" ]

什么是system.indexes

请有人详细说明吗?

我是mongo世界的新手.

Mar*_*erg 8

神秘的2个系列

当用户第一次将数据存储在数据库中或显式创建数据库时,会创建两个集合.

第一个,system.indexes包含有关数据库的各种集合中定义的索引的信息.您甚至可以使用它来访问它

db.system.indexes.find()
Run Code Online (Sandbox Code Playgroud)

隐藏的一个,system.namespaces保存有关数据库的一些元数据,实际上是从数据库管理的角度来看所有现有实体的名称.

虽然未显示,但您仍可以访问它:

db.system.namespaces.find()
Run Code Online (Sandbox Code Playgroud)

警告:不要弄乱他们中的任何一个.您的数据库很可能无法使用.你被警告了!

甚至可能超过这两个.有关详细信息,请阅读MongoDB文档中的系统集合.

神秘的4个物体

实际上,如果您尝试访问如上所示的系统数据库,那么这个变得非常容易.在foobardb使用集合foo和默认索引打开的数据库中_id,查询system.indexes将给出这样的结果(美化):

{
  "v" : 1,
  "key" : {
    "_id" : 1
  },
  "name" : "_id_",
  "ns" : "foobardb.foo"
}
Run Code Online (Sandbox Code Playgroud)

请注意,这是一个单独的文档.第二个查询的美化输出如下所示:

{ "name" : "foobardb.foo" }
{ "name" : "foobardb.system.indexes" }
{ "name" : "foobardb.foo.$_id_" }
Run Code Online (Sandbox Code Playgroud)

在这里,我们有三个文件.所以我们在元数据中有4个额外的文档.

  • 很好的答案.只是想补充一点,这些集合是一个实现细节,例如,在WiredTiger中不存在相同的方式.你不仅不应该改变它们,你根本不应该使用它们. (3认同)