From 9545cd0d195b34c7ee2d9f15b0fdd61023c51134 Mon Sep 17 00:00:00 2001 From: amadeus5201 <1491459939@qq.com> Date: Thu, 12 Jun 2025 17:05:36 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix=3D>=E4=BF=AE=E5=A4=8D=E5=AE=9E=E4=BD=93?= =?UTF-8?q?=E7=B1=BB=20=E5=B1=9E=E6=80=A7=E6=98=AF=20=E5=A4=9A=E7=BB=B4?= =?UTF-8?q?=E9=9B=86=E5=90=88=20=20=E6=9F=A5=E8=AF=A2=E5=87=BA=E6=9D=A5?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E7=BB=B4=E5=BA=A6=E9=94=99=E8=AF=AF=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapping/MappingMongoConverter.java | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/mongo-plus-core/src/main/java/com/mongoplus/mapping/MappingMongoConverter.java b/mongo-plus-core/src/main/java/com/mongoplus/mapping/MappingMongoConverter.java index f54dd0a..b6ec9fd 100644 --- a/mongo-plus-core/src/main/java/com/mongoplus/mapping/MappingMongoConverter.java +++ b/mongo-plus-core/src/main/java/com/mongoplus/mapping/MappingMongoConverter.java @@ -258,7 +258,11 @@ public class MappingMongoConverter extends AbstractMongoConverter { try { if (ClassTypeUtil.isTargetClass(Collection.class,clazz)) { - return handleCollectionType(sourceObj, typeReference, clazz, conversionStrategy); + if (isMultiDimensionalCollection(typeReference)) { + return handleDefaultType(sourceObj, clazz, conversionStrategy); + } else { + return handleCollectionType(sourceObj, typeReference, clazz, conversionStrategy); + } } else if (ClassTypeUtil.isTargetClass(Map.class,clazz)) { return handleMapType(sourceObj, typeReference, clazz, conversionStrategy); } else { @@ -427,4 +431,34 @@ public class MappingMongoConverter extends AbstractMongoConverter { return map; } + + /** + * 是否是多位数组 + */ + private boolean isMultiDimensionalCollection(TypeReference typeRef) { + // 1. 检查是否为参数化类型(带泛型) + if (!(typeRef.getType() instanceof ParameterizedType)) { + return false; // 非泛型类型,直接返回false + } + ParameterizedType paramType = (ParameterizedType) typeRef.getType(); + Type[] genericTypes = paramType.getActualTypeArguments(); + // 2. 检查每个泛型参数 + for (Type genericType : genericTypes) { + if (genericType instanceof Class) { + // 如果泛型参数是集合类 + if (Collection.class.isAssignableFrom((Class) genericType)) { + return true; + } + } else if (genericType instanceof ParameterizedType) { + ParameterizedType nestedType = (ParameterizedType) genericType; + Type rawType = nestedType.getRawType(); + // 3. 如果泛型参数本身是集合类型 + if (rawType instanceof Class && Collection.class.isAssignableFrom((Class) rawType)) { + return true; + } + } + } + return false; + } + } -- Gitee From 892fa99f7d85734be3e0c70e9c17a4b9db46ad87 Mon Sep 17 00:00:00 2001 From: amadeus5201 <1491459939@qq.com> Date: Thu, 12 Jun 2025 18:16:03 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix=3D>=20=E4=BF=AE=E5=A4=8DupdateWrapper.p?= =?UTF-8?q?ush(field,=20data,=20false);=E4=BA=8C=E7=BB=B4=E6=95=B0?= =?UTF-8?q?=E7=BB=84=E5=8F=96=E4=B8=8D=E5=88=B0PushOptions=E6=8A=A5?= =?UTF-8?q?=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handlers/condition/BuildCondition.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/mongo-plus-core/src/main/java/com/mongoplus/handlers/condition/BuildCondition.java b/mongo-plus-core/src/main/java/com/mongoplus/handlers/condition/BuildCondition.java index 3f708c2..4b57174 100644 --- a/mongo-plus-core/src/main/java/com/mongoplus/handlers/condition/BuildCondition.java +++ b/mongo-plus-core/src/main/java/com/mongoplus/handlers/condition/BuildCondition.java @@ -285,12 +285,16 @@ public class BuildCondition extends AbstractCondition { CompareCondition currentCompareCondition = buildUpdate.getCurrentCompareCondition(); BasicDBObject updateBasicDBObject = buildUpdate.getUpdateBasicDBObject(); Object value = currentCompareCondition.getValue(); - if (ClassTypeUtil.isTargetClass(Collection.class,value.getClass())) { - Bson pushOptions = buildPushOptions(currentCompareCondition.getValue(List.class), - currentCompareCondition.getExtraValue(PushOptions.class)); - updateBasicDBObject.put(currentCompareCondition.getColumn(),pushOptions); + if (ClassTypeUtil.isTargetClass(Collection.class, value.getClass())) { + PushOptions extraValue = currentCompareCondition.getExtraValue(PushOptions.class); + if (Objects.isNull(extraValue)) { + put(updateBasicDBObject, currentCompareCondition); + } else { + Bson pushOptions = buildPushOptions(currentCompareCondition.getValue(List.class), extraValue); + updateBasicDBObject.put(currentCompareCondition.getColumn(), pushOptions); + } } else { - put(updateBasicDBObject,currentCompareCondition); + put(updateBasicDBObject, currentCompareCondition); } return updateBasicDBObject; } -- Gitee