|
|
|
@ -22,6 +22,7 @@ import java.util.Map; |
|
|
|
import org.springframework.lang.Nullable; |
|
|
|
import org.springframework.lang.Nullable; |
|
|
|
import org.springframework.util.Assert; |
|
|
|
import org.springframework.util.Assert; |
|
|
|
import org.springframework.util.ObjectUtils; |
|
|
|
import org.springframework.util.ObjectUtils; |
|
|
|
|
|
|
|
import org.springframework.util.StringUtils; |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Gateway to {@literal Date} aggregation operations. |
|
|
|
* Gateway to {@literal Date} aggregation operations. |
|
|
|
@ -178,7 +179,7 @@ public class DateOperators { |
|
|
|
* Create a {@link Timezone} for the {@link AggregationExpression} resulting in the Olson Timezone Identifier or UTC |
|
|
|
* Create a {@link Timezone} for the {@link AggregationExpression} resulting in the Olson Timezone Identifier or UTC |
|
|
|
* Offset. |
|
|
|
* Offset. |
|
|
|
* |
|
|
|
* |
|
|
|
* @param value the {@link AggregationExpression} resulting in the timezone. |
|
|
|
* @param expression the {@link AggregationExpression} resulting in the timezone. |
|
|
|
* @return new instance of {@link Timezone}. |
|
|
|
* @return new instance of {@link Timezone}. |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
public static Timezone ofExpression(AggregationExpression expression) { |
|
|
|
public static Timezone ofExpression(AggregationExpression expression) { |
|
|
|
@ -380,6 +381,17 @@ public class DateOperators { |
|
|
|
return applyTimezone(DateToString.dateToString(dateReference()).toString(format), timezone); |
|
|
|
return applyTimezone(DateToString.dateToString(dateReference()).toString(format), timezone); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Creates new {@link AggregationExpression} that converts a date object to a string according to the server default |
|
|
|
|
|
|
|
* format. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* @return new instance of {@link DateToString}. |
|
|
|
|
|
|
|
* @since 2.1 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public DateToString toStringWithDefaultFormat() { |
|
|
|
|
|
|
|
return applyTimezone(DateToString.dateToString(dateReference()).defaultFormat(), timezone); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
/** |
|
|
|
* Creates new {@link AggregationExpression} that returns the weekday number in ISO 8601-2018 format, ranging from 1 |
|
|
|
* Creates new {@link AggregationExpression} that returns the weekday number in ISO 8601-2018 format, ranging from 1 |
|
|
|
* (for Monday) to 7 (for Sunday). |
|
|
|
* (for Monday) to 7 (for Sunday). |
|
|
|
@ -1352,6 +1364,11 @@ public class DateOperators { |
|
|
|
Assert.notNull(format, "Format must not be null!"); |
|
|
|
Assert.notNull(format, "Format must not be null!"); |
|
|
|
return new DateToString(argumentMap(value, format, Timezone.none())); |
|
|
|
return new DateToString(argumentMap(value, format, Timezone.none())); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public DateToString defaultFormat() { |
|
|
|
|
|
|
|
return new DateToString(argumentMap(value, null, Timezone.none())); |
|
|
|
|
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -1395,15 +1412,55 @@ public class DateOperators { |
|
|
|
return new DateToString(argumentMap(get("date"), get("format"), timezone)); |
|
|
|
return new DateToString(argumentMap(get("date"), get("format"), timezone)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Optionally specify the value to return when the date is {@literal null} or missing. <br /> |
|
|
|
|
|
|
|
* <strong>NOTE:</strong> Requires MongoDB 4.0 or later. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* @param value must not be {@literal null}. |
|
|
|
|
|
|
|
* @return new instance of {@link DateToString}. |
|
|
|
|
|
|
|
* @since 2.1 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public DateToString onNullReturn(Object value) { |
|
|
|
|
|
|
|
return new DateToString(append("onNull", value)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Optionally specify the field holding the value to return when the date is {@literal null} or missing. <br /> |
|
|
|
|
|
|
|
* <strong>NOTE:</strong> Requires MongoDB 4.0 or later. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* @param fieldReference must not be {@literal null}. |
|
|
|
|
|
|
|
* @return new instance of {@link DateToString}. |
|
|
|
|
|
|
|
* @since 2.1 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public DateToString onNullReturnValueOf(String fieldReference) { |
|
|
|
|
|
|
|
return onNullReturn(Fields.field(fieldReference)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Optionally specify the expression to evaluate and return when the date is {@literal null} or missing. <br /> |
|
|
|
|
|
|
|
* <strong>NOTE:</strong> Requires MongoDB 4.0 or later. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* @param expression must not be {@literal null}. |
|
|
|
|
|
|
|
* @return new instance of {@link DateToString}. |
|
|
|
|
|
|
|
* @since 2.1 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public DateToString onNullReturnValueOf(AggregationExpression expression) { |
|
|
|
|
|
|
|
return onNullReturn(expression); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
protected String getMongoMethod() { |
|
|
|
protected String getMongoMethod() { |
|
|
|
return "$dateToString"; |
|
|
|
return "$dateToString"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private static java.util.Map<String, Object> argumentMap(Object date, String format, Timezone timezone) { |
|
|
|
private static java.util.Map<String, Object> argumentMap(Object date, @Nullable String format, Timezone timezone) { |
|
|
|
|
|
|
|
|
|
|
|
java.util.Map<String, Object> args = new LinkedHashMap<String, Object>(2); |
|
|
|
java.util.Map<String, Object> args = new LinkedHashMap<String, Object>(2); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (StringUtils.hasText(format)) { |
|
|
|
args.put("format", format); |
|
|
|
args.put("format", format); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
args.put("date", date); |
|
|
|
args.put("date", date); |
|
|
|
|
|
|
|
|
|
|
|
if (!ObjectUtils.nullSafeEquals(timezone, Timezone.none())) { |
|
|
|
if (!ObjectUtils.nullSafeEquals(timezone, Timezone.none())) { |
|
|
|
@ -1421,6 +1478,16 @@ public class DateOperators { |
|
|
|
* @return |
|
|
|
* @return |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
DateToString toString(String format); |
|
|
|
DateToString toString(String format); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Creates new {@link DateToString} using the server default string format ({@code %Y-%m-%dT%H:%M:%S.%LZ}) for |
|
|
|
|
|
|
|
* dates. <br /> |
|
|
|
|
|
|
|
* <strong>NOTE:</strong> Requires MongoDB 4.0 or later. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* @return new instance of {@link DateToString}. |
|
|
|
|
|
|
|
* @since 2.1 |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
DateToString defaultFormat(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -2269,6 +2336,20 @@ public class DateOperators { |
|
|
|
return new DateFromString(appendTimezone(argumentMap(), timezone)); |
|
|
|
return new DateFromString(appendTimezone(argumentMap(), timezone)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Optionally set the date format to use. If not specified {@code %Y-%m-%dT%H:%M:%S.%LZ} is used.<br /> |
|
|
|
|
|
|
|
* <strong>NOTE:</strong> Requires MongoDB 4.0 or later. |
|
|
|
|
|
|
|
* |
|
|
|
|
|
|
|
* @param format must not be {@literal null}. |
|
|
|
|
|
|
|
* @return new instance of {@link DateFromString}. |
|
|
|
|
|
|
|
* @throws IllegalArgumentException if given {@literal format} is {@literal null}. |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
public DateFromString withFormat(String format) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Assert.notNull(format, "Format must not be null!"); |
|
|
|
|
|
|
|
return new DateFromString(append("format", format)); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
protected String getMongoMethod() { |
|
|
|
protected String getMongoMethod() { |
|
|
|
return "$dateFromString"; |
|
|
|
return "$dateFromString"; |
|
|
|
|