Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我正在使用Java for循环迭代Mongodb集合,这会造成堆内存问题 @RequestMapping(value=“/id/”,method=RequestMethod.GET) 公共字符串getClaimsDetailById(@RequestParam(value=“userId”)字符串userId, @RequestParam(value=“id”)字符串id)引发JsonProcessingException{ MongoDatabase数据库=this.mongoClient.getDatabase(this.database); MongoCollection collection=database.getCollection(this.collection); 列表声明=新的ArrayList(); 文档=新文档(“_id”,新ObjectId(id)); 列出索赔=收集.find(文档).into(索赔); List-claimsUpdatedList=new-ArrayList(); 用于(单据:索赔){ if(null!=doc.get(“Common”)){ documentcommon=(Document)doc.get(“common”); if(null!=common.get(“生效日期”)){ Date Date=(日期)common.get(“生效日期”); 普通认沽期权(“生效日期”,转换日期(日期)); } if(null!=common.get(“ExpirationDate”)){ Date Date=(日期)common.get(“到期日期”); 普通认沽期权(“到期日”,转换日(日期)); } 文件付诸表决(“普通”,普通); claimsUpdatedList.add(doc); } } JsonWriterSettings writerSettings=JsonWriterSettings.builder().outputMode(JsonMode.SHELL).indent(true.build(); 返回claimsUpdatedList.get(0.toJson)(writerSettings); }_Java - Fatal编程技术网

我正在使用Java for循环迭代Mongodb集合,这会造成堆内存问题 @RequestMapping(value=“/id/”,method=RequestMethod.GET) 公共字符串getClaimsDetailById(@RequestParam(value=“userId”)字符串userId, @RequestParam(value=“id”)字符串id)引发JsonProcessingException{ MongoDatabase数据库=this.mongoClient.getDatabase(this.database); MongoCollection collection=database.getCollection(this.collection); 列表声明=新的ArrayList(); 文档=新文档(“_id”,新ObjectId(id)); 列出索赔=收集.find(文档).into(索赔); List-claimsUpdatedList=new-ArrayList(); 用于(单据:索赔){ if(null!=doc.get(“Common”)){ documentcommon=(Document)doc.get(“common”); if(null!=common.get(“生效日期”)){ Date Date=(日期)common.get(“生效日期”); 普通认沽期权(“生效日期”,转换日期(日期)); } if(null!=common.get(“ExpirationDate”)){ Date Date=(日期)common.get(“到期日期”); 普通认沽期权(“到期日”,转换日(日期)); } 文件付诸表决(“普通”,普通); claimsUpdatedList.add(doc); } } JsonWriterSettings writerSettings=JsonWriterSettings.builder().outputMode(JsonMode.SHELL).indent(true.build(); 返回claimsUpdatedList.get(0.toJson)(writerSettings); }

我正在使用Java for循环迭代Mongodb集合,这会造成堆内存问题 @RequestMapping(value=“/id/”,method=RequestMethod.GET) 公共字符串getClaimsDetailById(@RequestParam(value=“userId”)字符串userId, @RequestParam(value=“id”)字符串id)引发JsonProcessingException{ MongoDatabase数据库=this.mongoClient.getDatabase(this.database); MongoCollection collection=database.getCollection(this.collection); 列表声明=新的ArrayList(); 文档=新文档(“_id”,新ObjectId(id)); 列出索赔=收集.find(文档).into(索赔); List-claimsUpdatedList=new-ArrayList(); 用于(单据:索赔){ if(null!=doc.get(“Common”)){ documentcommon=(Document)doc.get(“common”); if(null!=common.get(“生效日期”)){ Date Date=(日期)common.get(“生效日期”); 普通认沽期权(“生效日期”,转换日期(日期)); } if(null!=common.get(“ExpirationDate”)){ Date Date=(日期)common.get(“到期日期”); 普通认沽期权(“到期日”,转换日(日期)); } 文件付诸表决(“普通”,普通); claimsUpdatedList.add(doc); } } JsonWriterSettings writerSettings=JsonWriterSettings.builder().outputMode(JsonMode.SHELL).indent(true.build(); 返回claimsUpdatedList.get(0.toJson)(writerSettings); },java,Java,问题在于您使用的是into(),它一次将所有数据加载到列表,因此如果数据非常大,可能会导致堆过载 相反,您应该使用迭代器(),它使用数据库游标逐个处理数据,而无需将数据加载到应用程序内存中。这个概念并不局限于Mongo,它是所有数据库的通用机制(这就是为什么存在游标的概念) 例如: @RequestMapping(value = "/id/", method = RequestMethod.GET) public String getClaimsDetailById(@RequestParam(

问题在于您使用的是
into()
,它一次将所有数据加载到
列表
,因此如果数据非常大,可能会导致堆过载

相反,您应该使用
迭代器()
,它使用数据库游标逐个处理数据,而无需将数据加载到应用程序内存中。这个概念并不局限于Mongo,它是所有数据库的通用机制(这就是为什么存在游标的概念)

例如:

@RequestMapping(value = "/id/", method = RequestMethod.GET)
public String getClaimsDetailById(@RequestParam(value = "userId") String userId,
                                  @RequestParam(value = "id") String id) throws JsonProcessingException {
    MongoDatabase database = this.mongoClient.getDatabase(this.database);
    MongoCollection<Document> collection = database.getCollection(this.collection);
    List claim = new ArrayList();
    Document document = new Document("_id", new ObjectId(id));
    List<Document> claims = collection.find(document).into(claim);
    List<Document> claimsUpdatedList = new ArrayList<>();
    for (Document doc : claims) {
        if (null != doc.get("Common")) {
            Document common = (Document) doc.get("Common");
            if (null != common.get("EffectiveDate")) {
                Date date = (Date) common.get("EffectiveDate");
                common.put("EffectiveDate",convertDate(date));
            }
            if (null != common.get("ExpirationDate")) {
                Date date = (Date) common.get("ExpirationDate");
                common.put("ExpirationDate",convertDate(date));
            }
            doc.put("Common",common);
            claimsUpdatedList.add(doc);
        }
    }
    JsonWriterSettings writerSettings = JsonWriterSettings.builder().outputMode(JsonMode.SHELL).indent(true).build();
    return claimsUpdatedList.get(0).toJson(writerSettings);
}
。。。
FindTable documentCursor=collection.find(文档);
用于(文档文档:documentCursor){
...
}

谢谢你宝贵的建议。你能给我举个例子吗?我是Mongod的新手。在回答中对你的代码做了一个示例修改。谢谢你的回答。这对我很有帮助。嗨,我已经格式化了你的代码。然而,代码转储不是一个好问题。请回答您的问题,并用简单的英语描述您有什么问题。内存问题是什么?是否有要包括的堆栈跟踪?另见。
...
FindIterable<Document> documentCursor = collection.find(document);
for (Document doc : documentCursor) {
    ...
}