From c73ea6ac918952fbe0fd37b426a3e957afd6ddc3 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Thu, 11 Sep 2025 16:25:16 +0800 Subject: [PATCH] Update mongodb --- .../SqlBuilder/MongoDbExpressionContext.cs | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs index 7dc5f023b..7d8e69eb9 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs @@ -339,7 +339,7 @@ namespace SqlSugar.MongoDb context.queryBuilder.LambdaExpressions.Index++; return name; } - public override string Contains(MethodCallExpressionModel model) + public override string Contains(MethodCallExpressionModel model) { var item = model.Args.First().MemberValue; BsonValue right = new ExpressionVisitor(context).Visit(item as Expression); @@ -349,12 +349,26 @@ namespace SqlSugar.MongoDb { { "$regex", right }, // right 是普通字符串值,例如 "a" { "$options", "i" } // 忽略大小写 - }; - var match=new BsonDocument + }; + if (left is BsonDocument bsonDoc) + { + // left 是复杂表达式(如聚合管道中的表达式),需要嵌套 $expr + var exprDoc = new BsonDocument("$expr", new BsonDocument("$regexMatch", new BsonDocument + { + { "input", bsonDoc }, + { "regex", right }, + { "options", "i" } + })); + return exprDoc.ToJson(UtilMethods.GetJsonWriterSettings()); + } + else + { + var match = new BsonDocument { { left.ToString(), regexDoc } }; - return match.ToJson(UtilMethods.GetJsonWriterSettings()); + return match.ToJson(UtilMethods.GetJsonWriterSettings()); + } } public override string StartsWith(MethodCallExpressionModel model) {