在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
有没有更简单的方法(对大型数据库也有效)才能找到它?
由于
答案 0 :(得分:1)
你的方法是正确的。你要么:
count()
那里任何方法都会很好用。实际上,db.collection.stats();
也可以获得有关集合中元素总数的信息。所以我假设mongo宁愿从那里得到它然后计算它(如果不这样做,你可以自己做)。
另一种方法是从stats
获取数据。我更喜欢它,因为你不需要迭代任何东西。唯一的问题是你的公式是错误的,或者至少在我的数据类型上是错误的。我不明白为什么你减去集合和numExtents的数量,并且还使用索引进行这种奇怪的操作。
从dbStats看,对象只是所有集合中所有文档的总和。据我记得,您的馆藏只有db.system.indexes
,db.system.users
和db.system.namespaces
。所以公式应该是:
db.stats()['objects'] - db.system.indexes.count() - db.system.namespaces.count() - db.system.users.count()
所以我认为这是达到你想要的最快方式。