diff --git a/mongo-plus-annotation/src/main/java/com/mongoplus/enums/CommonOperators.java b/mongo-plus-annotation/src/main/java/com/mongoplus/enums/CommonOperators.java index 79bc0a81538c4046d55bb2680a3ce5b7b271e316..84808d7407578c929d572f070b1f2a53bfddffaf 100644 --- a/mongo-plus-annotation/src/main/java/com/mongoplus/enums/CommonOperators.java +++ b/mongo-plus-annotation/src/main/java/com/mongoplus/enums/CommonOperators.java @@ -49,6 +49,7 @@ public enum CommonOperators { CONCAT("$concat"), + DATE_TRUNC("$dateTrunc"), ; private final String operator; diff --git a/mongo-plus-core/src/main/java/com/mongoplus/aggregate/pipeline/AggregateOperator.java b/mongo-plus-core/src/main/java/com/mongoplus/aggregate/pipeline/AggregateOperator.java index 5ee3f2736baf9ba783695fbe13c1058eb634651b..d146c8a2bed28a8272d09862bd9c6c36ddacfb4a 100644 --- a/mongo-plus-core/src/main/java/com/mongoplus/aggregate/pipeline/AggregateOperator.java +++ b/mongo-plus-core/src/main/java/com/mongoplus/aggregate/pipeline/AggregateOperator.java @@ -1,13 +1,14 @@ package com.mongoplus.aggregate.pipeline; +import com.mongoplus.bson.MongoPlusDocument; +import com.mongoplus.support.SFunction; import org.bson.Document; import org.bson.conversions.Bson; import java.util.Arrays; import java.util.List; -import static com.mongoplus.enums.CommonOperators.CONCAT; -import static com.mongoplus.enums.CommonOperators.CONCAT_ARRAYS; +import static com.mongoplus.enums.CommonOperators.*; /** * 聚合操作符 @@ -42,4 +43,39 @@ public class AggregateOperator { return new Document(CONCAT.getOperator(), expressions); } + + /** + * $dateTrunc操作符 + * + * @param field 字段 + *
+ * @param unit 单位可以是能被解析为下列值的表达式:year、quarter、week、month、day、hour、minute、second、millisecond,与binSize一起指定时间段 + *
+ * @param binSize 时间数值,以表达式形式指定,必须是非零正数。默认值为 1。 + *
+ * @param startOfWeek 指定周开始的天,只有当单位是周时可用,缺省为Sunday,startOfWeek可以是一个表达式,但必须能够被解析为:monday (或 mon)、tuesday (或 tue)、wednesday (或 wed)、thursday (或 thu)、friday (或 fri)、saturday (或 sat)、sunday (或 sun) + *
+ * @param timezone 执行操作的时区,必须是能被解析为奥尔森时区标识符格式的字符串或UTC偏移量,如果timezone不指定,返回值显示为UTC + */ + public static Bson dateTrunc(SFunction field, String unit, Integer binSize, String startOfWeek, String timezone) { + return dateTrunc(field.getFieldNameLineOption(), unit, binSize, startOfWeek, timezone); + } + + public static Bson dateTrunc(String field, String unit, Integer binSize, String startOfWeek, String timezone) { + return new Document(DATE_TRUNC.getOperator(), new MongoPlusDocument() {{ + putIsNotNull("date", field); + putIsNotNull("unit", unit); + putIsNotNull("binSize", binSize); + putIsNotNull("timezone", timezone); + putIsNotNull("startOfWeek", startOfWeek); + }}); + } + + public static Bson dateTrunc(String field, String unit) { + return dateTrunc(field, unit, null, null, null); + } + + public static Bson dateTrunc(SFunction field, String unit) { + return dateTrunc(field, unit, null, null, null); + } }