【问题标题】:MongoDB count with query return more records than a count all带有查询的 MongoDB 计数返回的记录多于计数
【发布时间】:2015-05-14 11:05:31
【问题描述】:

我注意到 MongoDB 的一个奇怪行为,我试图猜测可能是什么问题:

我有一个 MongoDB,集合中有很多文档。我运行了以下查询:

db.mydocuments.count({_id:{$lte:new ObjectId("549010c9e4b06c2f044f27f4")}});

结果是 66.579.389 个文档

比我跑了以下:

db.mydocuments.count();

令人惊讶的是,我得到了以下总数:32.606.242

这怎么可能?一个集合的总计数怎么能小于一个查询的计数?至少它需要等于查询计数。

db.mydocument.stats() 是:

{
"ns" : "mydb.documents.photos",
"count" : 32606242,
"size" : 76109891776,
"avgObjSize" : 2334,
"storageSize" : 164665658240,
"numExtents" : 97,
"nindexes" : 1,
"lastExtentSize" : 2146426864,
"paddingFactor" : 1,
"systemFlags" : 0,
"userFlags" : 0,
"totalIndexSize" : 1944138336,
"indexSizes" : {
    "_id_" : 1944138336
},
"ok" : 1
}

【问题讨论】:

  • 不,我没有使用分片(我也发现这可能是孤立文档的问题,但不,它只是一台机器)
  • db.mydocuments.stats() 的文档数是多少?你有另一个索引可以测试计数吗?
  • 我刚刚用统计数据编辑了这个问题,不幸的是我没有另一个索引可以测试

标签: mongodb mongodb-query


【解决方案1】:

.stats() 返回分配的记录数量以及平均对象大小、范围等。 此调用不应获取有关您的集合的确切信息(如许多文档)。

示例: 您插入了 100 个文档,然后删除了 99 个。该集合仍分配给处理 100 个文档。 不要依赖 .stats() 调用,除非您只需要它来提供信息。

在您的情况下,我们的行为完全相反。可能是,损坏的索引。

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 2019-06-18
    • 2013-09-22
    • 2019-05-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多