插入mongoDB时出现MongoInternalException

时间:2015-04-06 10:54:54

标签: java json mongodb

我正在输入数据到mongodb但突然遇到这个错误。不知道如何解决这个问题。这是因为超出了最大尺寸?。如果没有那么为什么我会收到这个错误?。任何人都知道如何解决这个问题?以下是我遇到的错误

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

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

2 个答案:

答案 0 :(得分:3)

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

以下是参考文档:http://docs.mongodb.org/manual/reference/limits/

要存储大于最大尺寸的文档,MongoDB会提供 GridFS API。

  

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

参考:MongoFiles

答案 1 :(得分:2)

要插入大小超过16MB的文档,您需要使用MongoDB的GRIDFS。 GridFS是mongoDB上的一个抽象层,它以块的形式划分数据(默认为255K)。当你使用java时,它也很容易使用java驱动程序。我在mongoDB中插入一个弹性搜索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。

希望有帮助.....:)