MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

spring data - Mongodb - método findBy para objetos aninhados


Basta usar o @Query anotação nesse método.
public interface CustomRepository extends MongoRepository<PracticeQuestion, String> {

    @Query(value = "{ 'userId' : ?0, 'questions.questionID' : ?1 }", fields = "{ 'questions.questionID' : 1 }")
    List<PracticeQuestion> findByUserIdAndQuestionsQuestionID(int userId, int questionID);

}

Adicionando os fields parte do @Query anotação, você está dizendo ao Mongo para retornar apenas essa parte do documento. Cuidado, porém, ele ainda retorna o documento inteiro no mesmo formato - apenas faltando tudo o que você não especificou. Portanto, seu código ainda terá que retornar List<PracticeQuestion> e você terá que fazer:
foreach (PracticeQuestion pq : practiceQuestions) {
    Question q = pq.getQuestions().get(0); // This should be your question.
}