如何使用 MongoDB Java 获取对象数组中的字符串?

How to get a String inside an Object Array using MongoDB Java?

我正在努力学习 MongoDB,我想在对象数组中获取一个字符串,我的 MongoDB 文档在这里:

{
   "_id" : ObjectId("5f1507fed91e81246c409a59"),
   "identification" : "punishment",
   "lastID" : 2,
   "punishmentsTypes" : [ 
       {
           "category" : "OFENSA_JOGADOR",
           "reason" : "Ofensa a Jogador",
           "group" : [ 
               "HELPER", 
               "MODERATOR", 
               "ADMINISTRATOR", 
               "MANAGER", 
               "MASTER"
           ],
           "description" : "Ofender algum jogador",
           "cases" : [ 
               {
                   "1" : {
                       "type" : "MUTE",
                       "duration" : 604800000
                   }
               }, 
               {
                   "2" : {
                       "type" : "BAN",
                       "duration" : 0
                   }
               }
           ]
       }, 
       {
           "category" : "FALSIFICACAO",
           "reason" : "Falsificação de provas",
           "group" : [ 
               "ADMINISTRATOR", 
               "MANAGER", 
               "MASTER"
           ],
           "description" : "Falsicar provas ao denunciar um jogador em nosso fórum",
           "cases" : [ 
               {
                   "1" : {
                       "type" : "BAN",
                       "duration" : 0
                   }
               }
           ]
       }, 
       {
           "category" : "HACK",
           "reason" : "Hack",
           "group" : [ 
               "MODERATOR", 
               "ADMINISTRATOR", 
               "MANAGER", 
               "MASTER"
           ],
           "description" : "Uso de cheats ou programas ilícitos",
           "cases" : [ 
               {
                   "1" : {
                       "type" : "BAN",
                       "duration" : 7776000000.0
                   }
               }, 
               {
                   "2" : {
                       "type" : "BAN",
                       "duration" : 0
                   }
               }
           ]
       }
   ],
   "unpunishmentTypes" : [ 
       {}
   ]
}

我试过这个:

MongoCollection<Document> collection = mongoDatabase.getCollection("settings");

BasicDBObject query = new BasicDBObject();
BasicDBObject field = new BasicDBObject();

query.put("id", "punish");
field.put("punishmentsTypes", 1);
field.put("_id", 0);

Document test = collection.find(query).projection(field).first();

assert test != null;
Object object = test.get("punishmentsTypes");

System.out.println(object);

这就是输出:

[Document{{category=OFENSA_JOGADOR}}, Document{{category=FALSIFICACAO}}, Document{{category=HACK}}]

如何只获取类别字符串,输出为:OFENSA_JOGADOR, FALSIFICACAO, HACK?

我不确定您是如何通过查询获得该结果的,但我是这样获得您的结果的:


    MongoCollection<Document> collection = mongoDatabase.getCollection("settings");
    Document query = new Document();
    
    query.put("identification", "punishment");
    
    Document test = collection.find(query).first();
    
    List<Document> punishmentsTypes = test.getList("punishmentsTypes", Document.class);
    
    for (Document document : punishmentsTypes) {
        String category = document.getString("category");
        System.out.println(category);
    }