I came to a compromise, with mixing BasicQuery with Criteria:
BasicQuery q = new BasicQuery("{$or : [{paysDestination : {$elemMatch : {nom : '"+destination+"'}}},{paysPrincipal : {nom : '"+destination+"'}}]}");
q.addCriteria(Criteria.where("debut").lte(datedebut).and("fin").gte(c.getTime()));
If you still have any solution for only coding it with BasicQuery, don't hesitate !