通过Java/Spring Data编程设置Capped collection大小限制遇int超限如何解决
问题根因
Java 语言中int为32位有符号整数,取值范围为-2147483648 ~ 2147483647,你要设置的2GB对应字节数2147483648刚好超出int类型的最大值,因此触发数值溢出错误。
你之前传值报错的核心原因是:直接书写的整数常量默认会被Java识别为int类型,还没传入BasicDBObject就已经在编译/运行阶段触发了溢出,而非BasicDBObject不支持long类型参数。
解决方案
直接将数值显式声明为long类型即可,只需在数值末尾添加L后缀标识该值为long类型:
Map<String, Object> commandArguments = new BasicDBObject(); commandArguments.put(CONVERT_TO_CAPPED, COLLECTION_NAME); // 数值后加L显式声明为long类型,规避int溢出 commandArguments.put(SIZE, 2147483648L); BasicDBObject command = new BasicDBObject(commandArguments); Document commandResult = database.runCommand(command);
补充说明
- MongoDB对Capped集合的大小上限要求为:64位系统下最大支持8PB,完全满足2GB的设置需求
- 不要使用String或BigInteger类型传值,MongoDB的
convertToCapped命令要求size参数必须为数值类型,传非数值类型会触发命令执行错误
内容的提问来源于stack exchange,提问作者Sathish David Kumar
相关产品推荐
相关产品推荐

