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