Aufgrund der Einschränkungen des BasicDBO-Objekts können Sie kein zweites "$ und" hinzufügen.
Problem
Im Folgenden finden Sie unter Verwendung von Spring-Daten und Mongodb eine Funktion zum Suchen von Daten innerhalb eines Datumsbereichs.
public ListfindByIpAndDate(String ip, Date startDate, Date endDate) { Query query = new Query( Criteria.where("ip").is(ip) .andOperator(Criteria.where("createdDate").gte(startDate)) .andOperator(Criteria.where("createdDate").lt(endDate)) ); return mongoOperation.find(query, RequestAudit.class); }
Es trifft folgende Fehlermeldung:
org.springframework.data.mongodb.InvalidMongoDbApiUsageException: Due to limitations of the com.mongodb.BasicDBObject, you can't add a second '$and' expression specified as '$and : [ { "createdDate" : { "$lt" : { "$date" : "2013-02-25T16:00:00.000Z"}}}]'. Criteria already contains '$and : [ { "createdDate" : { "$gte" : { "$date" : "2013-02-24T16:00:00.000Z"}}}]'
Lösung
Wenn Sie mehrere "$and
" -Operatoren im selben Feld "createdDate
" hinzufügen, wird dies von Spring in eine falsche Mongodb-Abfrage interpretiert. Ändern Sie die Abfrage folgendermaßen, um das Problem zu beheben:
Query query = new Query( Criteria.where("ip").is(ip) .andOperator( Criteria.where("createdDate").lt(endDate), Criteria.where("createdDate").gte(startDate) ) );
Verwenden Sie für mehrere Kriterien im selben Feld ein "Komma", um sie zu kombinieren.