如何在mongodb数据库中找到用户生成的文档总数?

时间:2013-11-29 10:24:00

标签: mongodb

在mongoDB中,使用count()函数可以轻松查找集合中的文档数。但是,如何在所有用户生成的集合中找到文档的数量(不包括系统集合,如db.system.indexes和db.system.users)?

一种直接的方法是迭代所有集合并检查它们是否是用户生成的,然后将它们的计数相加()。然而,我怀疑当存在大量藏品时,这将是低效的。

另一种方法是使用db.stats()命令。这给了我一些基本信息,例如索引,范围,集合和对象的数量。然而,对象与用户生成的文档的数量不同。似乎可以使用以下公式来计算db.stats()输出中的文档数量(在mongo shell上运行):

docs = db.stats()['objects'] - db.stats()['collections'] - 
    db.stats()['numExtents'] - 2 * (db.stats()['indexes'] - 2) + 1

有没有更简单的方法(对大型数据库也有效)才能找到它?

由于

1 个答案:

答案 0 :(得分:1)

你的方法是正确的。你要么:

  • 遍历所有集合并汇总所有count()那里
  • 从元数据(您的统计信息收集)中获取相同的信息

任何方法都会很好用。实际上,db.collection.stats();也可以获得有关集合中元素总数的信息。所以我假设mongo宁愿从那里得到它然后计算它(如果不这样做,你可以自己做)。

另一种方法是从stats获取数据。我更喜欢它,因为你不需要迭代任何东西。唯一的问题是你的公式是错误的,或者至少在我的数据类型上是错误的。我不明白为什么你减去集合和numExtents的数量,并且还使用索引进行这种奇怪的操作。

dbStats看,对象只是所有集合中所有文档的总和。据我记得,您的馆藏只有db.system.indexesdb.system.usersdb.system.namespaces。所以公式应该是:

db.stats()['objects'] - db.system.indexes.count() - db.system.namespaces.count() - db.system.users.count()

所以我认为这是达到你想要的最快方式。