From e42eec0e7dcdcc4d5899de3008e02355bb186589 Mon Sep 17 00:00:00 2001
From: amadeus5201 <1491459939@qq.com>
Date: Wed, 12 Mar 2025 15:45:23 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0$dateTrunc=E6=93=8D?=
=?UTF-8?q?=E4=BD=9C=E7=AC=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../com/mongoplus/enums/CommonOperators.java | 1 +
.../aggregate/pipeline/AggregateOperator.java | 40 ++++++++++++++++++-
2 files changed, 39 insertions(+), 2 deletions(-)
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 79bc0a8..84808d7 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 5ee3f27..d146c8a 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);
+ }
}
--
Gitee