@Override public void addQuery(AdRequest request, QueryBuilder builder) { if (request.date() != null) { List<DBObject> condition_queries = new ArrayList<DBObject>(); /* * Prefix der Indizieren beachten. */ for (int i = 0; i < DateConditionDefinition.MAX_PERIOD_COUNT; i++) { QueryBuilder condition = QueryBuilder.start(); // from part of the query BasicDBObject query_from_1 = new BasicDBObject( AdDBConstants.ADDB_AD_DATE_FROM + i, new BasicDBObject("$lte", request.date())); BasicDBObject query_from_2 = new BasicDBObject(AdDBConstants.ADDB_AD_DATE_FROM + i, AdDBConstants.ADDB_AD_DATE_ALL); List<BasicDBObject> queries = new ArrayList<BasicDBObject>(); queries.add(query_from_1); queries.add(query_from_2); BasicDBObject query_from = new BasicDBObject("$or", queries); condition.and(query_from); // to part of the query BasicDBObject query_to_1 = new BasicDBObject( AdDBConstants.ADDB_AD_DATE_TO + i, new BasicDBObject("$gte", request.date())); BasicDBObject query_to_2 = new BasicDBObject(AdDBConstants.ADDB_AD_DATE_TO + i, AdDBConstants.ADDB_AD_DATE_ALL); queries = new ArrayList<BasicDBObject>(); queries.add(query_to_1); queries.add(query_to_2); BasicDBObject query_to = new BasicDBObject("$or", queries); condition.and(query_to); condition_queries.add(condition.get()); } builder.and(new BasicDBObject("$or", condition_queries)); } }