class MongoQueryExecutor implements QueryExecutor {

    @Override
    public <T, R> R findOne(Query<T, R> query) {
        try {
            final MongoResults<R> results = fetch(translate(query).limit(1), query);
            return results.hasNext() ? results.next() : null;
        } catch (final MongoException mx) {
            throw new DataStoreException(mx.getMessage(), mx);
        }
    }

    public  MongoQueryExecutor(
            DB db,
            WriteConcern writeConcern,
            MongoQueryTranslator queryTranslator,
            EntityResolver entityResolver,
            final int batchSize);
    public  MongoQueryExecutor(
            DB db,
            WriteConcern writeConcern,
            MongoQueryTranslator queryTranslator,
            EntityResolver entityResolver);
    public  MongoQueryExecutor(
            Mongo mongo,
            String database,
            WriteConcern writeConcern,
            MongoQueryTranslator queryTranslator,
            EntityResolver entityResolver);
    public  MongoQueryExecutor(
            Mongo mongo,
            String database,
            WriteConcern writeConcern,
            MongoQueryTranslator queryTranslator,
            EntityResolver entityResolver,
            final int batchSize);

}