MongoDB集合计数返回-1

4

我有一个MongoDB集合,当我调用db.collection.count()时返回-1,但是如果我调用db.collection.find(),则会返回一个文档。

这个负数计数是否意味着集合出了问题?我在文档中找不到任何信息。

我尝试向集合中插入一个虚拟文档 - 这将计数更改为2。删除此文档后,计数现在正确为1,只保存原始文档。


听起来像是一个损坏的数据库。你尝试过运行repair/repairDatabase()吗? - Alex
@Jaco,有没有办法确认数据库是否损坏?文档建议在使用副本集时进行重新同步,但显然我需要确认其他副本是否健康。或者有没有调试原因的方法?现在已经看到了相同应用程序的两个实例。 - JackIngleton
2
如果问题再次发生,您可以运行 db.collection.validate({full:true}) - Alex
@Jaco,我在同一个副本集中的另一个节点上看到了一个非常类似的错误 - 它返回了0的计数(尽管存在一个文档),运行验证命令后,它现在返回正确的值1。(验证还没有返回任何错误) - JackIngleton
1个回答

5

看起来我错过了文档的这一部分:

使用Wired Tiger存储引擎的mongod发生非正常关闭后,count()报告的计数统计可能不准确。

漂移量取决于最后一个检查点和非正常关闭之间执行的插入、更新或删除操作数量。检查点通常每60秒发生一次。但是,使用非默认的--syncdelay设置运行的mongod实例可能具有更多或更少的检查点频率。

在mongod上对每个集合运行validate以在非正常关闭后恢复正确的统计信息。

运行db.unboundCollection.validate({full:true})解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接