Opdeler det, forespørgslen med søgeordet Between
udføres mod MongoDB-databasen med det logiske resultat {"createdAt" : {"$gt" : d1, "$lt" : d2}}
så der er en chance for, at du ikke får de dokumenter, der har createdAt
dato inklusive inden for det givne datointerval, dvs. d1 < createdAt < d2
da det givne datointerval ikke opfylder kriterierne. Til reference er disse nogle af fortolkningerne på forespørgselsmetoder
:
Understøttede søgeord til forespørgselsmetoder
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}}
Som en løsning kan du bruge @Query
anmærkning. Jeg har ikke testet dette, men du vil måske prøve følgende eksempel på implementering af brugerdefinerede forespørgsler:
public interface UserRepository extends MongoRepository<User, String> {
@Query(value = "{ 'createdAt' : {$gte : ?0, $lte: ?1 }}")
public ArrayList<User> findbyCreatedAtBetween(Date from, Date to);
}
Hvis ovenstående ikke virker for dig, skal du oprette en brugerdefineret grænseflade og din implementeringsklasse for at udføre den tilpassede forespørgsel. Opret f.eks. en grænseflade med et navn, der tilføjer Custom
:
public interface UserRepositoryCustom {
public List<User> findbyCreatedAtBetween(Date from, Date to);
}
Rediger UserRepository
og tilføj UserRepositoryCustom
grænseflade, der skal udvides:
@Repository
public interface UserRepository extends UserRepositoryCustom, MongoRepository {
}
Opret din implementeringsklasse for at implementere metoderne defineret i UserRepositoryCustom
grænseflade.
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));
}
}