@Override
  public Map<String, Long> getId2mtime(Coll<?> coll) {
    Map<String, Long> ret = null;

    DBCollection dbcoll = fixColl(coll);

    DBCursor cursor = dbcoll.find(dboEmpty, dboKeysIdandMtime);
    try {
      ret = new HashMap<String, Long>(cursor.count());
      while (cursor.hasNext()) {
        BasicDBObject raw = (BasicDBObject) cursor.next();
        Object remoteId = raw.get(ID_FIELD);

        // In case there is no _mtime set we assume 0. Probably a manual database addition by the
        // server owner.
        long mtime = raw.getLong(MTIME_FIELD, 0);

        ret.put(remoteId.toString(), mtime);
      }
    } finally {
      cursor.close();
    }

    return ret;
  }
  @Override
  public Collection<String> getIds(Coll<?> coll) {
    List<String> ret = null;

    DBCollection dbcoll = fixColl(coll);

    DBCursor cursor = dbcoll.find(dboEmpty, dboKeysId);
    try {
      ret = new ArrayList<String>(cursor.count());
      while (cursor.hasNext()) {
        Object remoteId = cursor.next().get(ID_FIELD);
        ret.add(remoteId.toString());
      }
    } finally {
      cursor.close();
    }

    return ret;
  }