【问题标题】:MongoInternalException while inserting into mongoDB插入 mongoDB 时出现 MongoInternalException
【发布时间】:2015-04-06 10:54:53
【问题描述】:

我正在向 mongodb 输入数据,但突然遇到此错误。不知道如何解决。这是由于超出了最大大小吗?如果不是,那么为什么我会收到此错误?任何人都知道如何解决这?以下是我遇到的错误

Exception in thread "main" com.mongodb.MongoInternalException: DBObject of size 163745644 is over Max BSON size 16777216

我知道我的数据集很大...但是还有其他解决方案吗?

【问题讨论】:

    标签: java json mongodb


    【解决方案1】:

    您尝试插入的文档超过了最大 BSON 文档大小,即 16 MB

    这里是参考文档:http://docs.mongodb.org/manual/reference/limits/

    为了存储大于最大大小的文档,MongoDB 提供了 GridFS API。

    mongofiles 实用程序可以操作存储在 从命令行中的 GridFS 对象中的 MongoDB 实例。这是 特别有用,因为它提供了存储对象之间的接口 在您的文件系统和 GridFS 中。

    参考:MongoFiles

    【讨论】:

    • @rahulroc ....感谢您的回复...但是我的数据太大了......所以我不得不以某种方式插入它...... wat 尽量减少数据尺寸还是有其他方法??
    【解决方案2】:

    要插入大小超过 16MB 的文档,您需要使用 MongoDB 的 GRIDFS。 GridFS 是 mongoDB 上的一个抽象层,它将数据分成块(默认为 255K)。当您使用 java 时,它也很容易与 java 驱动程序一起使用。我在 mongoDB 中插入了一个 elasticsearch jar(大小为 20mb)。示例代码:

        MongoClient mongo = new MongoClient("localhost", 27017);
        DB db = mongo.getDB("testDB");
    
        String newFileName = "elasticsearch-Jar";
        File imageFile = new  File("/home/impadmin/elasticsearch-1.4.2.tar.gz");
    
        GridFS gfs = new GridFS(db);
    
        //Insertion  
        GridFSInputFile inputFile = gfs.createFile(imageFile);
    
        inputFile.setFilename(newFileName);
        inputFile.put("name", "devender");
        inputFile.put("age", 23);
        inputFile.save();
    
        //Fetch back 
        GridFSDBFile outputFile = gfs.findOne(newFileName);
    

    了解更多here

    如果您想直接使用 mongoclient 插入,您将使用其他答案中提到的 mongofiles。

    希望对您有所帮助.....:)

    【讨论】:

      猜你喜欢
      • 2017-04-26
      • 1970-01-01
      • 2019-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      相关资源
      最近更新 更多