Из-за ограничений BasicDBObject, вы не можете добавить второй ‘$ и

Из-за ограничений BasicDBObject, вы не можете добавить второй «$ и»

проблема

Используя данные Spring и Mongodb, ниже приведена функция для поиска данных в диапазоне дат.

public List findByIpAndDate(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);

}

Появляется следующее сообщение об ошибке:

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"}}}]'

Решение

Добавление нескольких операторов «$and» в одно поле «createdDate» заставит Spring интерпретировать его в неправильный запрос mongodb. Чтобы исправить это, измените запрос следующим образом:

    Query query = new Query(
        Criteria.where("ip").is(ip)
        .andOperator(
            Criteria.where("createdDate").lt(endDate),
            Criteria.where("createdDate").gte(startDate)
        )
    );

Для нескольких критериев в одном поле используйте запятую, чтобы объединить их.