怎么在mongodb获取到的集合中遍历获取另外一个内嵌集合且需要获取内嵌集合中的某值?

问题描述

我通过mongodb的JDBC方式获取到一个数据集合,里边还包含另外一个集合,最内层集合中有一个Date类型的值,但是我需要获取一次,怎么在lambda循环中继续使用下一次循环呢?如果我在lambda中采用实体类DTO的话会导致类型转换异常。

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

//数据库连接
MongoClient mongoClient = new MongoClient(new MongoClientURI(uri));
MongoCollection<Document> db = mongoClient.getDatabase(gameDTO.getMongodbDbName())
        .getCollection("game_box_round");
ArrayList<GameBoxRoundDTO> gameBoxRoundDTOS = new ArrayList<>();
db.find(new Document("players.user_id", restSession.getUserId())
        .append("end_time", new Document("$gt", date)))
        .sort(new Document("end_time", -1))
        .limit(20)
        .forEach((Block<Document>) document -> {
            ArrayList<GameRoundDTO> gameRoundDTOS = new ArrayList<>();
            GameBoxRoundDTO gameBoxRoundDTO = new GameBoxRoundDTO()
                    .setId(document.getString("_id"))
                    .setBoxCode(document.getString("box_code"))
                    .setRoomId(document.getInteger("room_id"))
                    .setBeginTime(document.getDate("begin_time"))
                    .setEndTime(document.getDate("end_time"))
                    .setPlayers((List<PlayerDTO>) document.get("players"))
                    .setGameRounds((List<GameRoundDTO>) document.get("game_rounds"));
            gameBoxRoundDTOS.add(gameBoxRoundDTO);
            System.out.println(document.toJson());
        });

你期待的结果是什么?实际看到的错误信息又是什么?

我想要获取字段为game_rounds集合下的某个值,在这里应该怎么写?也就是需要内嵌循环一次,应该怎么写呢?求大佬帮忙!!!
我在里边采用了普通的for循环导致了类型转换异常

//List<GameRoundDTO> game_rounds = (List<GameRoundDTO>) document.get("game_rounds");
    ArrayList<GameRoundDTO> gameRoundDTOS = new ArrayList<>();
    /*for (GameRoundDTO gameRound : game_rounds) {
        GameRoundDTO gameRoundDTO = new GameRoundDTO()
                .setGameSaveId(gameRound.getGameSaveId())
                .setCurrentRound(gameRound.getCurrentRound())
                .setEndTime(gameRound.getEndTime())
                .setBeginTime(gameRound.getBeginTime());
        gameRoundDTOS.add(gameRoundDTO);
    }*/

这样写是错误的。。。。

阅读 2.7k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题