@Override
    public List<T> multiGet(List<List<Object>> keys) {
        try {
            List<T> values = new ArrayList<T>();

            for (List<Object> rowKey : keys) {
                Query operation = mapper.retrieve(rowKey);

                DBCursor results = coll.find(operation.getQuery(), operation.getProjection());

                Iterator<DBObject> docIter = results.iterator();
                DBObject doc;
                if (results != null && docIter.hasNext() && (doc = docIter.next()) != null) {
                    if (docIter.hasNext()) {
                        LOG.error("Found non-unique value for key [{}]", rowKey);
                    } else {
                        values.add((T) mapper.getValue(doc));
                    }
                } else {
                    values.add(null);
                }
            }

            _mreads.incrBy(values.size());
            LOG.debug("Retrieving the following keys: {} with values: {}", keys, values);
            return values;
        } catch (Exception e) {
            e.printStackTrace();
            //throw new IllegalStateException("Impossible to reach this code");
            return new ArrayList<T>();
        }
    }