Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算mongoDB中文档数的最佳方法_Mongodb_Mongoose - Fatal编程技术网

计算mongoDB中文档数的最佳方法

计算mongoDB中文档数的最佳方法,mongodb,mongoose,Mongodb,Mongoose,我们收集了大量的文件,比如说大约10万份。现在我们要计算设置了键x的文档数 如果我尝试使用Collection.countDocuments({x:{$exists:true}}})我会得到结果,但它会立即在控制台中创建一个警告:查询目标:扫描的对象/返回的已超过1000 那么,有没有更好的方法来清点这些文件?字段上有一个索引,是否可以获取索引的长度 谢谢您可以使用stats()方法返回的索引字段。 stats()方法“返回有关集合的统计信息” 参见此处示例: 按存储not count时使用的

我们收集了大量的文件,比如说大约10万份。现在我们要计算设置了键
x
的文档数

如果我尝试使用
Collection.countDocuments({x:{$exists:true}}})
我会得到结果,但它会立即在控制台中创建一个警告:查询目标:扫描的对象/返回的已超过1000

那么,有没有更好的方法来清点这些文件?字段上有一个
索引
,是否可以获取索引的长度


谢谢

您可以使用
stats()
方法返回的
索引
字段。
stats()
方法“返回有关集合的统计信息”

参见此处示例:


按存储not count时使用的空间索引键返回大小

检查并解释索引是否被使用。(也有相关更新)

指定索引后,可以使用提示选项检查性能

或者,在您的用例中,如果可能的话,$inc运算符预先计算计数可能是一个很好的选择

如果cursor.count更快,请尝试cursor.count。文档应该更快,但检查时不会有任何伤害
在Mongo中没有查看索引树的真正方法,其他人链接的内容只返回树的大小,我不确定这些信息在这种情况下有多有用

现在你的问题是这是最好的计数方法吗?。 答案是肯定的-伊什

是一个包装函数,它只模拟以下管道:

db.collection.aggregate([
   { $match: <query> },
   { $group: { _id: null, n: { $sum: 1 } } } )
])
db.collection.aggregate([
{$match:},
{$group:{{u id:null,n:{$sum:1}}})
])
此管道是最有效的方式,但运行此聚合和使用包装器函数之间的差异约为100-200毫秒,具体取决于您的机器规格

这意味着,如果你在寻找“方式”更好的性能,你不会找到它


尽管如此,这个警告是愚蠢的,它只是意味着你有超过1000个文档与该字段。它的真正目的是在您试图在没有适当索引的情况下查询1-20个文档时提醒您。

这是否回答了您的问题
Collection.find({}).count()
似乎更快,但它已被弃用,因此可能随时被删除……这是索引中的文档数还是索引的存储大小?除非是稀疏索引,否则索引也会包含缺少字段的文档,不是吗?这只是索引的大小,而不是长度或计数
db.collection.aggregate([
   { $match: <query> },
   { $group: { _id: null, n: { $sum: 1 } } } )
])