执行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 } } }
       ]
    )


  • Lv 1

    如果有做分片的話,可能存在資料搬遷的情況,這時候用count會重複計算

    所以採用aggregate的方式計算才能準確計算總數


  • Lv 1

    由於分散式集群正在遷移資料,它導致count結果值錯誤,需要使用aggregate pipeline來得到正確統計結果,

    例如: db.my.aggregate([{$group: {_id: null, count: {$sum: 1}}}])


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待