Update mongodb

This commit is contained in:
sunkaixuan 2025-06-11 20:05:19 +08:00
parent b3da93082b
commit c6ca767eb7
3 changed files with 57 additions and 11 deletions

View File

@ -122,8 +122,8 @@ namespace MongoDbTest
.GroupBy(it => it.Name)
.Select(it => new
{
Id = it.Name,
MyCount = SqlFunc.AggregateCount(it.Id)
Name = it.Name,
x = SqlFunc.AggregateCount(it.Id)
}).ToList();
//测试生成SQL性能
TestSqlBuilder(db);

View File

@ -166,14 +166,7 @@ namespace SqlSugar.MongoDb
{
arg = "$" + str.AsString;
}
var countExpression = new BsonDocument(name, new BsonDocument("$sum",
new BsonDocument("$cond", new BsonArray
{
new BsonDocument("$ifNull", new BsonArray { arg, false }),
1,
0
})
));
var countExpression = new BsonDocument(name, new BsonDocument("$sum",1));
var result= countExpression.ToJson(SqlSugar.MongoDb.UtilMethods.GetJsonWriterSettings());
context.queryBuilder.GroupByValue += $"({UtilConstants.ReplaceCommaKey}({result}){UtilConstants.ReplaceCommaKey})";
context.queryBuilder.LambdaExpressions.Index++;

View File

@ -1,4 +1,5 @@
using MongoDB.Bson;
using Dm.util;
using MongoDB.Bson;
using SqlSugar.MongoDb;
using System;
using System.Collections.Generic;
@ -115,6 +116,7 @@ namespace SqlSugar.MongoDb
}
}
#endregion
#region Select
if (this.SelectValue is Expression expression)
@ -129,6 +131,57 @@ namespace SqlSugar.MongoDb
}
#endregion
#region GroupBy
if (this.GroupByValue.HasValue())
{
var regex = new Regex($@"\(\{UtilConstants.ReplaceCommaKey}\((.*?)\)\{UtilConstants.ReplaceCommaKey}\)",
RegexOptions.Compiled);
var matches = regex.Matches(this.GroupByValue);
var selectItems = new List<string>();
foreach (Match match in matches)
{
var selectItem = match.Groups[1].Value;
selectItems.Add(selectItem);
}
var jsonPart = Regex.Split(this.GroupByValue, UtilConstants.ReplaceCommaKey)
.First()
.TrimEnd('(')
.replace("GROUP BY ", "");
var fieldNames = new List<string>();
var bson = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(jsonPart);
if (bson.Contains("fieldName"))
{
var field = bson["fieldName"].AsString;
fieldNames.add(field);
}
// 构造 _id 部分:支持多字段形式
var groupId = new BsonDocument();
foreach (var field in fieldNames)
{
groupId.Add(field, $"${field}");
}
var groupDoc = new BsonDocument("$group", new BsonDocument
{
{ "_id", groupId }
});
// 解析 selectJsonItems每个是 BsonDocument 字符串)
var groupFields = groupDoc["$group"].AsBsonDocument;
foreach (var json in selectItems)
{
var doc = BsonDocument.Parse(json);
foreach (var element in doc)
{
groupFields.Add(element.Name, element.Value);
}
}
operations.Insert(operations.Count-1, groupDoc.ToJson(UtilMethods.GetJsonWriterSettings()));
}
#endregion
sb.Append($"aggregate {this.GetTableNameString} ");
sb.Append("[");
sb.Append(string.Join(", ", operations));