From ba92e9458fb72d83a7328fb8e31e127b1ace91f2 Mon Sep 17 00:00:00 2001 From: sunkaixuan <610262374@qq.com> Date: Sat, 28 Jun 2025 09:18:58 +0800 Subject: [PATCH] Update mongodb --- .../MongoDbTest/UnitTest/QueryLeftJoin.cs | 14 +++++++ .../MongoDb/SqlBuilder/MongoDbQueryBuilder.cs | 42 +++++++++++++------ 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/Src/Asp.NetCore2/MongoDbTest/UnitTest/QueryLeftJoin.cs b/Src/Asp.NetCore2/MongoDbTest/UnitTest/QueryLeftJoin.cs index 7b8fd174e..57fa66dc6 100644 --- a/Src/Asp.NetCore2/MongoDbTest/UnitTest/QueryLeftJoin.cs +++ b/Src/Asp.NetCore2/MongoDbTest/UnitTest/QueryLeftJoin.cs @@ -64,6 +64,20 @@ namespace MongoDbTest StudentName = x.Name, SchoolName = y.Name }).ToList(); + + if (list.Count != 3) Cases.ThrowUnitError(); + if (list.Any(s=>s.SchoolName== "TestSchool") ==false) Cases.ThrowUnitError(); + if (list.Any(s => s.StudentName == "jack") == false) Cases.ThrowUnitError(); + + var list2 = db.Queryable() + .InnerJoin((x, y) => x.SchoolId == y.Id) + .Select((x, y) => new + { + StudentName = x.Name, + SchoolName = y.Name + }).ToList(); + if (list2.Count != 1) Cases.ThrowUnitError(); + if (list2.Any(s => s.SchoolName == "TestSchool") == false) Cases.ThrowUnitError(); } [SqlSugar.SugarTable("UnitStudent123131")] public class Student : MongoDbBase diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs index 95cbad543..20188af25 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbQueryBuilder.cs @@ -30,9 +30,9 @@ namespace SqlSugar.MongoDb { return "ORDER BY NOW() "; } - } + } #endregion - + #region ToSqlString Items private void ProcessSelectConditions(List operations) { @@ -60,7 +60,7 @@ namespace SqlSugar.MongoDb var json = dos.ToJson(UtilMethods.GetJsonWriterSettings()); operations.Add($"{{\"$project\": {json} }}"); } - } + } private void ProcessGroupByConditions(List operations) { if (this.GroupByValue.HasValue()) @@ -114,7 +114,7 @@ namespace SqlSugar.MongoDb } operations.Insert(operations.Count - 1, groupDoc.ToJson(UtilMethods.GetJsonWriterSettings())); } - } + } private void ProcessOrderByConditions(List operations) { @@ -187,7 +187,7 @@ namespace SqlSugar.MongoDb operations.Add($"{{ \"$match\": {trimmed} }}"); } } - } + } private void ProcessJoinInfoConditions(List operations) { foreach (var item in this.JoinQueryInfos) @@ -215,11 +215,27 @@ namespace SqlSugar.MongoDb operations.Add(lookupDoc.ToJson(UtilMethods.GetJsonWriterSettings())); // $unwind - var unwindDoc = new BsonDocument("$unwind", new BsonDocument + BsonValue unwindDoc = null; + if (item.JoinType == JoinType.Left) { - { "path", $"${asName}" }, - { "preserveNullAndEmptyArrays", true } - }); + unwindDoc=new BsonDocument("$unwind", new BsonDocument + { + { "path", $"${asName}" }, + { "preserveNullAndEmptyArrays", true } + }); + } + else if(item.JoinType==JoinType.Inner) + { + // InnerJoin: 不保留空数组和null + unwindDoc = new BsonDocument("$unwind", new BsonDocument + { + { "path", $"${asName}" } + }); + } + else + { + throw new Exception(" No Support "+item.JoinType); + } operations.Add(unwindDoc.ToJson(UtilMethods.GetJsonWriterSettings())); } } @@ -245,8 +261,8 @@ namespace SqlSugar.MongoDb { List operations = new List(); var sb = new StringBuilder(); - - ProcessJoinInfoConditions(operations); + + ProcessJoinInfoConditions(operations); ProcessWhereConditions(operations); @@ -289,9 +305,9 @@ namespace SqlSugar.MongoDb { this.SelectCacheKey = this.SelectCacheKey + string.Join("-", this.JoinQueryInfos.Select(it => it.TableName)); } - if (IsDistinct) + if (IsDistinct) { - result = "distinct "+result; + result = "distinct " + result; } if (this.SubToListParameters != null && this.SubToListParameters.Any()) {