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);
+ }
}