MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoRepository findByCreatedAtBetween gibt keine genauen Ergebnisse zurück

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