gpt4 book ai didi

Mongodb 从计数函数和聚合管道中给出不同的计数结果

转载 作者:可可西里 更新时间:2023-11-01 10:02:41 26 4
gpt4 key购买 nike

我在 mongodb 中有一个名为 users 的集合。我正在尝试查找集合中所有文档的数量。

令人惊讶的是,以下查询给出了不同的结果。对于

db.users.find({}).count()

`db.users.count()`

输出是 533911,对于

db.users.aggregate(
[
{ $group: { _id: "$_id" } },
{ $group: { _id : null, count : { $sum : 1 } } }
]
)

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

输出为 533950。

谁能告诉我为什么聚合查询和普通查询返回不同的结果?在此先感谢您的帮助。

最佳答案

我看到 2 个可能的原因:

  1. 如果您的集合是分片的,您应该使用聚合框架来对文档进行计数,因为由于 block 移动或孤立文档,计数操作可能不准确。 How to count in Sharded Clusters

  2. 如果您正在使用 WiredTiger 存储引擎(现在很可能是因为它是自 V3.2 以来的默认设置),WiredTiger 存储的统计数据在不正常关闭后可能会不准确。您应该在每个集合上运行 db.collection.validate()WiredTiger unclean shutdown

注意:您可以通过使用 cleanupOrphaned 删除孤立文档来减少“困惑”命令,但在分片环境中,您应该始终使用聚合框架。

关于Mongodb 从计数函数和聚合管道中给出不同的计数结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41462024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com