执行db.Persons.find().count()返回的结果不正确?
-
在文档Persons中插入了100W记录,但之后使用db.collections.find().count()返回的数据不是100W,返回的结果比100W大,刷新了好多次才返回100W。
环境为3副本3切片部署,执行查询开始返回的结果会比100W大,然后慢慢减少,最后才到至100W。
那怎么才能及时统计到正确的记录数?
-
這裡有提到
https://docs.mongodb.com/manual/reference/command/count/On a sharded cluster, count can result in an inaccurate count if orphaned documents exist or if a chunk migration is in progress.
db.collection.aggregate(
[
{ $group: { _id: null, count: { $sum: 1 } } }
]
)
-
如果有做分片的話,可能存在資料搬遷的情況,這時候用count會重複計算
所以採用aggregate的方式計算才能準確計算總數
-
由於分散式集群正在遷移資料,它導致count結果值錯誤,需要使用aggregate pipeline來得到正確統計結果,
例如: db.my.aggregate([{$group: {_id: null, count: {$sum: 1}}}])