public final FluentFuture<Optional<T>> update() {
      options.sort(convertToBson(ordering));
      // TODO exlusion / projection
      return repository.doModify(criteria, collectRequiredUpdate(), options);
    }
Performs an update. If query will match a document, then it will be modified and old or new
version of document returned (depending if {@link #returningNew()} was configured). When
there
isn't any matching document, {@link Optional#absent()} will be result of the operation.
@return future of optional document (present if matching document would be found)
mongo/src/org/immutables/mongo/repository/Repositories.java