我们有一个包含大量文档的集合,比如说大约 100k。我们现在想要计算具有该键集的文档的数量x。
如果我尝试使用它,Collection.countDocuments({ x: { $exists: true }})我会得到结果,但它会立即在控制台中创建警告:Query Targeting: Scanned Objects / Returned has gone above 1000。
那么,有没有更好的方法来统计文档呢?字段上有一个Index,是否可以获取索引的长度?
谢谢
在 Mongo 中没有真正的方法来查看索引树,其他人链接的只是返回树的大小,我不确定该信息在这种情况下有多大用处。
现在你的问题是这是最好的计数方法吗?答案是肯定的...-ish。
countDocuments是一个包装函数,它只是模拟以下管道:
db.collection.aggregate([
{ $match: <query> },
{ $group: { _id: null, n: { $sum: 1 } } } )
])
Run Code Online (Sandbox Code Playgroud)
此管道是最有效的方法,但运行此聚合和使用包装器函数之间的差异约为 100-200 毫秒,具体取决于您的机器规格。
这意味着如果您正在寻找“更好的”性能,您将找不到它。
话虽如此,这个警告很愚蠢,它只是意味着您有超过 1000 个包含该字段的文档。它的真正目的是在您尝试查询 1-20 个没有正确索引的文档时发出警报。
| 归档时间: |
|
| 查看次数: |
4600 次 |
| 最近记录: |