Zerlegt, die Abfrage mit dem Schlüsselwort Between
wird gegen die MongoDB-Datenbank mit dem logischen Ergebnis {"createdAt" : {"$gt" : d1, "$lt" : d2}}
ausgeführt Es besteht also die Möglichkeit, dass Sie die Dokumente mit dem createdAt
nicht erhalten einschließlich Datum innerhalb des angegebenen Datumsbereichs, d. h. d1 < createdAt < d2
da der angegebene Datumsbereich die Kriterien nicht erfüllt. Als Referenz sind dies einige der Interpretationen des Abfragemethoden
:
Unterstützte Schlüsselwörter für Abfragemethoden
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}}
Als Problemumgehung können Sie den @Query
Anmerkung. Ich habe dies nicht getestet, aber vielleicht möchten Sie das folgende Beispiel für die Implementierung einer benutzerdefinierten Abfrage ausprobieren:
public interface UserRepository extends MongoRepository<User, String> {
@Query(value = "{ 'createdAt' : {$gte : ?0, $lte: ?1 }}")
public ArrayList<User> findbyCreatedAtBetween(Date from, Date to);
}
Wenn das obige für Sie nicht funktioniert, erstellen Sie eine benutzerdefinierte Schnittstelle und Ihre Implementierungsklasse, um die benutzerdefinierte Abfrage auszuführen. Erstellen Sie beispielsweise eine Schnittstelle mit einem Namen, der Custom
anhängt :
public interface UserRepositoryCustom {
public List<User> findbyCreatedAtBetween(Date from, Date to);
}
Ändern Sie das UserRepository
und fügen Sie UserRepositoryCustom
hinzu zu erweiternde Schnittstelle:
@Repository
public interface UserRepository extends UserRepositoryCustom, MongoRepository {
}
Erstellen Sie Ihre Implementierungsklasse, um die in UserRepositoryCustom
definierten Methoden zu implementieren Schnittstelle.
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));
}
}