En raison des limites de BasicDBObject, vous ne pouvez pas ajouter un deuxième «$ et»
Problème
En utilisant les données Spring et Mongodb, vous trouverez ci-dessous une fonction pour rechercher des données dans une plage de dates.
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); }
Il frappe le message d'erreur suivant:
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"}}}]'
Solution
L'ajout de plusieurs opérateurs «$and
» sur le même champ «createdDate
» fera que Spring l'interprétera comme une mauvaise requête mongodb. Pour le corriger, modifiez la requête comme suit:
Query query = new Query( Criteria.where("ip").is(ip) .andOperator( Criteria.where("createdDate").lt(endDate), Criteria.where("createdDate").gte(startDate) ) );
Pour plusieurs critères sur le même champ, utilise une «virgule» pour les combiner.