Возвращающий список идентификаторов сущностей с указанным значением без определенной сущности/POJO

#java #mongodb #spring-boot #spring-data-jpa

Вопрос:

Я пытаюсь написать метод, который возвращает мне идентификаторы (в виде списка ) всех записей из коллекции, имеющих определенный статус.
Я ищу решение, но, к сожалению, не могу найти ничего правильного.
В настоящее время у меня есть что-то вроде этого:

 List<String> getAllLecturersIdList() {
    MongoCollection<Document> collection.mongoTemplate.getCollection("lecturers");
    MongoCursor<Document> cursor = collection.find().iterator();
    ArrayList<String> listOfIDS = new ArrayList<>();
    while (cursor.hasNext()) {
        listOfIDS.add(cursor.next().getObjectId("_id").toString());
    }
    return listOfIDS;

}
 

Этот метод возвращает мне список идентификаторов всех лекторов.
Сущность лектора также имеет поле «статус» со значениями, такими как «АКТИВЕН», «УВОЛЕН», «УВОЛЕН» и так далее.
Я хотел бы, чтобы мне возвращались только удостоверения преподавателей, имеющих АКТИВНЫЙ статус.
Как это сделать, чтобы при возвращении из коллекции были только сущности с АКТИВНЫМ статусом, а не для очистки уровня репозитория / служб?
Заранее спасибо за помощь!
Важно — я не хочу, чтобы в приложении создавалась структура сущности.
Следовательно, решение не может содержать класс POJO / сущности, и вот в чем проблема (я не могу использовать, например, Критерии, потому что каждый пример содержит определенную сущность).

Ответ №1:

Вы можете вернуться к методу низкого уровня, если нет сопоставления типов результатов с результатами запроса MongoOperations#executeQuery :

 List<String> getAllLecturersIdList() {
    Query query = new Query();
    query.fields().include("_id");
    query.addCriteria(Criteria.where("status").is("ACTIVE"));
    ArrayList<String> listOfIDS = new ArrayList<>();
    mongoTemplate.executeQuery(query, "lecturers", document -> listOfIDS.add(document.getObjectId("_id").toString()));
    return listOfIDS;
}
 

Ответ №2:

Должно сработать следующее:

 List<String> getAllLecturersIdList() {
    MongoCollection<Document> collection.mongoTemplate.getCollection("lecturers");
    MongoCursor<Document> cursor = collection.find().iterator();
    ArrayList<String> listOfIDS = new ArrayList<>();
    while (cursor.hasNext()) {
        Document document = cursor.next();
        if (document.getString("status") == "ACTIVE") {
          listOfIDS.add(document.getObjectId("_id").toString());
        }
    }
    return listOfIDS;
}