在MongoDB中查找最大的文档大小

是否有可能在MongoDB中find最大的文档大小?

db.collection.stats()显示平均大小,这不是真正具有代表性,因为在我的情况下,大小可能相差很大。

你可以使用一个小的shell脚本来获得这个值。

注意:以下将执行全表扫描

 var max = 0; db.test.find().forEach(function(obj) { var curr = Object.bsonsize(obj); if(max < curr) { max = curr; } }) print(max); 

注意:这将尝试将整个结果集存储在内存中(从.toArray )。 小心大数据集。 不要在生产中使用! Abishek的答案具有处理光标而不是跨越内存数组的优点。

如果你还想要_id,试试这个。 给定一个名为“请求”的集合:

 // Creates a sorted list, then takes the max db.requests.find().toArray().map(function(request) { return {size:Object.bsonsize(request), _id:request._id}; }).sort(function(a, b) { return a.size-b.size; }).pop(); // { "size" : 3333, "_id" : "someUniqueIdHere" } 

如果你正在处理一个巨大的集合,一次加载到内存中将无法工作,因为你需要更多的内存,而不是整个集合的大小。

相反,您可以使用我创build的以下软件包批量处理整个集合: https : //www.npmjs.com/package/mongodb-largest-documents

你所要做的就是提供MongoDB连接string和集合名称。 该脚本将在批量遍历整个集合时输出前X个最大的文档。

预习