0

我在 ubuntu 操作系统上使用 mongoDB 3.6.3 版。我创建了一个包含 100 条记录的集合

要操作 mongo shell 上的数据,我分配光标如下

cur = db.dummyData.find({}, {_id: 0})

现在cur.count()是 100 但是cur.toArray().length80。

我不确定为什么会这样。我尝试过使用一堆不同的集合 toArray() 长度总是比实际计数少 20。

希望有任何帮助来理解这种行为。

4

1 回答 1

0

MongoDB 为每个集合保留一个运行的文档计数,该计数会针对每个插入/删除操作进行更新。诸如硬关机之类的某些事件可能会导致元数据中的此数字与实际集合不同。

cursor.count()函数在不获取任何文档的情况下从元数据中查询 MongoDB 请求该数字,因此速度非常快。该cursor.itcount()函数实际上会获取文档,因此运行速度会较慢,但始终会返回准确的计数。

要更正集合元数据中的计数,请db.collectionName.validate(true)从 mongo shell 对有问题的集合运行。

于 2020-04-27T14:59:51.860 回答