public Object getBindableValue(int index) { return getConvertedValue(delegate.getBindableValue(index), null); }
@Override public Range<Distance> getDistanceRange() { return delegate.getDistanceRange(); }
@Override public Optional<Class<?>> getDynamicProjection() { return delegate.getDynamicProjection(); }
@SuppressWarnings({ "unchecked", "rawtypes" }) protected Flux<GeoResult<Object>> doExecuteQuery(@Nullable Query query, Class<?> type, String collection) { Point nearLocation = accessor.getGeoNearLocation(); NearQuery nearQuery = NearQuery.near(nearLocation); if (query != null) { nearQuery.query(query); } Range<Distance> distances = accessor.getDistanceRange(); distances.getUpperBound().getValue().ifPresent(it -> nearQuery.maxDistance(it).in(it.getMetric())); distances.getLowerBound().getValue().ifPresent(it -> nearQuery.minDistance(it).in(it.getMetric())); Pageable pageable = accessor.getPageable(); nearQuery.with(pageable); return (Flux) operations.geoNear(nearQuery, type, collection); }
/** * Returns the serialized value to be used for the given {@link ParameterBinding}. * * @param accessor must not be {@literal null}. * @param parameters * @param binding must not be {@literal null}. * @return */ @SuppressWarnings("unchecked") private String getParameterValueForBinding(MongoParameterAccessor accessor, MongoParameters parameters, ParameterBinding binding) { Object value = binding.isExpression() ? evaluateExpression(binding.getExpression(), parameters, accessor.getValues()) : accessor.getBindableValue(binding.getParameterIndex()); if (value instanceof String && binding.isQuoted()) { if (binding.isExpression() && ((String) value).startsWith("{")) { return (String) value; } return binding.isExpression() ? JSON.serialize(value) : QuotedString.unquote(JSON.serialize(value)); } return EncodableValue.create(value).encode(codecRegistryProvider, binding.isQuoted()); }
case NEAR: Range<Distance> range = accessor.getDistanceRange(); Optional<Distance> distance = range.getUpperBound().getValue(); Optional<Distance> minDistance = range.getLowerBound().getValue(); Point point = accessor.getGeoNearLocation(); Point pointToUse = point == null ? nextAs(parameters, Point.class) : point;
public Pageable getPageable() { return delegate.getPageable(); }
public PotentiallyConvertingIterator iterator() { return new ConvertingIterator(delegate.iterator()); }
@Override public Object[] getValues() { return delegate.getValues(); }
public Sort getSort() { return delegate.getSort(); }
public Point getGeoNearLocation() { return delegate.getGeoNearLocation(); }
public TextCriteria getFullText() { return delegate.getFullText(); }
public boolean hasBindableNullValue() { return delegate.hasBindableNullValue(); }
@SuppressWarnings("unchecked") GeoResults<Object> doExecuteQuery(Query query) { Point nearLocation = accessor.getGeoNearLocation(); NearQuery nearQuery = NearQuery.near(nearLocation); if (query != null) { nearQuery.query(query); } Range<Distance> distances = accessor.getDistanceRange(); distances.getLowerBound().getValue().ifPresent(it -> nearQuery.minDistance(it).in(it.getMetric())); distances.getUpperBound().getValue().ifPresent(it -> nearQuery.maxDistance(it).in(it.getMetric())); Pageable pageable = accessor.getPageable(); nearQuery.with(pageable); return (GeoResults<Object>) operation.near(nearQuery).all(); }
/** * Returns the serialized value to be used for the given {@link ParameterBinding}. * * @param accessor must not be {@literal null}. * @param parameters * @param binding must not be {@literal null}. * @return */ @SuppressWarnings("unchecked") private String getParameterValueForBinding(MongoParameterAccessor accessor, MongoParameters parameters, ParameterBinding binding) { Object value = binding.isExpression() ? evaluateExpression(binding.getExpression(), parameters, accessor.getValues()) : accessor.getBindableValue(binding.getParameterIndex()); if (value instanceof String && binding.isQuoted()) { if (binding.isExpression() && ((String) value).startsWith("{")) { return (String) value; } return binding.isExpression() ? JSON.serialize(value) : QuotedString.unquote(JSON.serialize(value)); } return EncodableValue.create(value).encode(codecRegistryProvider, binding.isQuoted()); }
case NEAR: Range<Distance> range = accessor.getDistanceRange(); Optional<Distance> distance = range.getUpperBound().getValue(); Optional<Distance> minDistance = range.getLowerBound().getValue(); Point point = accessor.getGeoNearLocation(); Point pointToUse = point == null ? nextAs(parameters, Point.class) : point;
public Pageable getPageable() { return delegate.getPageable(); }
public PotentiallyConvertingIterator iterator() { return new ConvertingIterator(delegate.iterator()); }
@Override public Object[] getValues() { return delegate.getValues(); }
public Sort getSort() { return delegate.getSort(); }