#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;
}