当我在测试数据库中执行db.stats时,我得到以下内容
db.stats()
{
"db" : "test",
"collections" : 6,
"objects" : 1000032,
"avgObjSize" : 112.00064797926467,
"dataSize" : 112004232,
"storageSize" : 175812608,
"numExtents" : 17,
"indexes" : 8,
"indexSize" : 169905456,
"fileSize" : 2080374784,
"nsSizeMB" : 16,
"extentFreeList" : {
"num" : 77,
"totalSize" : 760766464
},
"dataFileVersion" : {
"major" : 4,
"minor" : 22
},
"ok" : 1
}
这些是我在测试数据库中的不同集合
db.getCollectionNames();
[
"foo",
"sentences",
"stackoverflow",
"system.indexes",
"system.profile"
]
以下是每个集合上文件的单独计数
db.foo.count() - 1000000
db.sentences.count() - 7
db.stackoverflow.count() - 2
db.system.indexes.count() - 8
db.system.profile.count() - 2
现在我有两个问题
1)为什么我在db.stats()查询中将集合作为6,当我在db.getCollectionNames()中只有5时
2)文档总数应为1000000 + 7 + 2 + 8 + 2 = 1000016,但在db.stats中,我得到“对象”:1000032
请帮助您理解这个
db.version();
3.0.3
db.serverStatus().storageEngine
{ "name" : "mmapv1" }
其他信息
我在mongo shell中创建了一个全新的DB并执行了db.stats并获得了以下结果
use newdb
db.stats()
{
"db" : "newdb",
"collections" : 0,
"objects" : 0,
"avgObjSize" : 0,
"dataSize" : 0,
"storageSize" : 0,
"numExtents" : 0,
"indexes" : 0,
"indexSize" : 0,
"fileSize" : 0,
"ok" : 1
}
现在所有数据都显示正确,然后我创建了一个集合并只插入了一条记录,然后我再次得到了计数中的差异。
db.mycollection.insert({_id:1, name:'Clement Amarnath'});
WriteResult({ "nInserted" : 1 })
db.stats()
{
"db" : "newdb",
"collections" : 3, "objects" : 5,
"avgObjSize" : 60.8,
"dataSize" : 304,
"storageSize" : 20480,
"numExtents" : 3,
"indexes" : 1,
"indexSize" : 8176,
"fileSize" : 67108864,
"nsSizeMB" : 16,
"extentFreeList" : {
"num" : 0,
"totalSize" : 0
},
"dataFileVersion" : {
"major" : 4,
"minor" : 22
},
"ok" : 1
}
db.getCollectionNames()
[ "mycollection", "system.indexes" ]
db.system.indexes.count()
1
答案 0 :(得分:1)
收集计数的原因始终为+1 db.getCollectionNames
上列出的实际收藏集,是否有隐藏的集合system.namespaces
,用于存储有关集合的信息。
这也解决了总物体的差异。
db.stats()
{
"db" : "test",
"collections" : 6, "objects" : 1000035,
"avgObjSize" : 112.0006479773208,
"dataSize" : 112004568,
"storageSize" : 175812608,
"numExtents" : 17,
"indexes" : 8,
"indexSize" : 169905456,
"fileSize" : 2080374784,
"nsSizeMB" : 16,
"extentFreeList" : {
"num" : 77,
"totalSize" : 760766464
},
"dataFileVersion" : {
"major" : 4,
"minor" : 22
},
"ok" : 1
}
集合
db.getCollectionNames()
[
"foo",
"sentences",
"stackoverflow",
"system.indexes",
"system.profile"
]
收藏计数
db.stats
中列出的馆藏数量为6 = db.getCollectionNames() is 5
+馆藏system.namespaces
=将馆藏数量计为6。
对象计数
db.stackoverflow.count() - 5
db.foo.count() - 1000000
db.system.namespaces.count() - 13
db.system.indexes.count() - 8
db.system.profile.count() - 2
db.sentences.count() - 7
db.stackoverflow.count() - 5
Document count = 5+1000000+13+8+2+7+5 = 10000035