如何使用Java的MongoOperations计算MongoDB集合的数据大小
Spring Data MongoDB 中查询集合数据大小的解决方案
问题根源
MongoOperations的executeCommand方法接收的是MongoDB原生数据库命令文档,不是Mongo Shell的JS执行语句,你之前直接传入Shell脚本字符串不会被服务端解析执行,因此无返回也不报错。
推荐解决方案(兼容所有支持的MongoDB版本)
使用MongoDB原生collStats统计命令,返回结果中的size字段和db.collection.dataSize()的返回值完全一致:
// 替换为实际集合名称 String collectionName = "myCollection"; // 构造统计命令 Document statsCommand = new Document("collStats", collectionName); // 执行命令获取结果 Document commandResult = myMongoOpObject.executeCommand(statsCommand); // 提取数据大小,单位为字节 long dataSize = commandResult.getLong("size"); // 附加常用统计字段说明: // storageSize:集合在磁盘上占用的存储空间,包含预留空闲块,开启压缩时会小于size // totalSize:集合+索引总占用磁盘大小(MongoDB 4.4及以上版本支持) // count:集合中文档总数
不推荐兼容方案(仅适配MongoDB 4.2以下版本)
如果必须调用Shell JS方法,可使用已废弃的eval命令,注意生产环境通常会禁用JavaScript执行权限,该方案不建议上线使用:
String collectionName = "myCollection"; Document evalCommand = new Document("eval", String.format("db.getCollection('%s').dataSize()", collectionName)); Document result = myMongoOpObject.executeCommand(evalCommand); long dataSize = result.getLong("retval");
内容的提问来源于stack exchange,提问作者shix
相关产品推荐
相关产品推荐

