From a7837ddf8f3238b2778507611850570e4f4b050a Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Thu, 12 Jun 2025 14:07:28 +0800 Subject: [PATCH] Update Mongodb --- .../MongoDbTest/OrmTest/OrmTest.cs | 11 ++++++++ Src/Asp.NetCore2/MongoDbTest/Program.cs | 2 +- .../MongoDb/SqlBuilder/MongoDbQueryBuilder.cs | 25 ++++++++++--------- 3 files changed, 25 insertions(+), 13 deletions(-) diff --git a/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs b/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs index b05910fde..d41f1974e 100644 --- a/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs +++ b/Src/Asp.NetCore2/MongoDbTest/OrmTest/OrmTest.cs @@ -127,6 +127,17 @@ namespace MongoDbTest max=SqlFunc.AggregateMax(it.Id), min=SqlFunc.AggregateMin(it.Id) }).ToList(); + + var list14 = db.Queryable() + .GroupBy(it => new { it.Name ,it.Price }) + .Select(it => new + { + key = it.Name, + Prie=it.Price, + groupCount = SqlFunc.AggregateCount(it.Id), + max = SqlFunc.AggregateMax(it.Id), + min = SqlFunc.AggregateMin(it.Id) + }).ToList(); //测试生成SQL性能 TestSqlBuilder(db); } diff --git a/Src/Asp.NetCore2/MongoDbTest/Program.cs b/Src/Asp.NetCore2/MongoDbTest/Program.cs index 69e28647c..18a551363 100644 --- a/Src/Asp.NetCore2/MongoDbTest/Program.cs +++ b/Src/Asp.NetCore2/MongoDbTest/Program.cs @@ -1,5 +1,5 @@ using MongoDbTest; -//MongoDb还在开发中预计5月30号前可以使用 +//MongoDb还在开发中预计6月30号前可以使用 OrmTest.Init(); AdoTest.Init(); ExpTest.Init(); diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs index 337631ede..85c92dcb5 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs @@ -115,8 +115,7 @@ namespace SqlSugar.MongoDb } } #endregion - - + #region Select if (this.SelectValue is Expression expression) { @@ -129,8 +128,7 @@ namespace SqlSugar.MongoDb operations.Add($"{{\"$project\": {json} }}"); } #endregion - - + #region GroupBy if (this.GroupByValue.HasValue()) { @@ -144,17 +142,20 @@ namespace SqlSugar.MongoDb var selectItem = match.Groups[1].Value; selectItems.Add(selectItem); } - var jsonPart = Regex.Split(this.GroupByValue, UtilConstants.ReplaceCommaKey) + var jsonPart = "["+Regex.Split(this.GroupByValue, UtilConstants.ReplaceCommaKey) .First() .TrimEnd('(') - .Replace("GROUP BY ", ""); + .Replace("GROUP BY ", "")+"]"; var fieldNames = new List(); - var bson = MongoDB.Bson.Serialization.BsonSerializer.Deserialize(jsonPart); - if (bson.Contains("fieldName")) - { - var field = bson["fieldName"].AsString; - operations[operations.Count - 1] = operations[operations.Count - 1].Replace($"\"${field}\"", $"\"$_id.{field}\""); - fieldNames.Add(field); + var bsonArray = MongoDB.Bson.Serialization.BsonSerializer.Deserialize(jsonPart); + foreach (BsonDocument bson in bsonArray) + { + if (bson.Contains("fieldName")) + { + var field = bson["fieldName"].AsString; + operations[operations.Count - 1] = operations[operations.Count - 1].Replace($"\"${field}\"", $"\"$_id.{field}\""); + fieldNames.Add(field); + } } // 构造 _id 部分:支持多字段形式 var groupId = new BsonDocument();