private Iterable<Integer> queryDocuments(BSONObject query) throws MongoServerException {
    synchronized (indexes) {
      for (Index index : indexes) {
        if (index.canHandle(query)) {
          return matchDocuments(query, index.getPositions(query));
        }
      }
    }

    return matchDocuments(query);
  }