Desglosándolo, la consulta con la palabra clave Between
se está ejecutando contra la base de datos MongoDB con el resultado lógico {"createdAt" : {"$gt" : d1, "$lt" : d2}}
por lo que existe la posibilidad de que no obtenga los documentos que tienen el createdAt
fecha inclusive dentro del intervalo de fechas dado, es decir, d1 < createdAt < d2
ya que el rango de fechas dado no cumple con los criterios. Como referencia, estas son algunas de las interpretaciones en métodos de consulta
:
Palabras clave admitidas para métodos de consulta
Keyword Sample Logical result
After findByBirthdateAfter(Date date) {"birthdate" : {"$gt" : date}}
Before findByBirthdateBefore(Date date) {"birthdate" : {"$lt" : date}}
Between findByAgeBetween(int from, int to) {"age" : {"$gt" : from, "$lt" : to}}
Como solución alternativa, es posible que desee utilizar @Query
anotación. No he probado esto, pero es posible que desee probar el siguiente ejemplo de implementación de consulta personalizada:
public interface UserRepository extends MongoRepository<User, String> {
@Query(value = "{ 'createdAt' : {$gte : ?0, $lte: ?1 }}")
public ArrayList<User> findbyCreatedAtBetween(Date from, Date to);
}
Si lo anterior no funciona para usted, cree una interfaz personalizada y su clase de implementación para ejecutar la consulta personalizada. Por ejemplo, cree una interfaz con un nombre que agregue Custom
:
public interface UserRepositoryCustom {
public List<User> findbyCreatedAtBetween(Date from, Date to);
}
Modificar el UserRepository
y agregue el UserRepositoryCustom
interfaz que se ampliará:
@Repository
public interface UserRepository extends UserRepositoryCustom, MongoRepository {
}
Cree su clase de implementación para implementar los métodos definidos en UserRepositoryCustom
interfaz.
public class UserRepositoryImpl implements UserRepositoryCustom {
@Autowired
MongoTemplate mongoTemplate;
@Override
public ArrayList<User> findbyCreatedAtBetween(Date from, Date to) {
return mongoTemplate.find(
Query.addCriteria(Criteria.where("createdAt").gte(from).lte(to));
}
}