Update mongodb

This commit is contained in:
sunkaixuan
2025-06-13 20:10:25 +08:00
parent 7fe07df9df
commit a5a1ddf47a
4 changed files with 37 additions and 6 deletions

View File

@@ -62,7 +62,7 @@ namespace SqlSugar.MongoDb
return null;
}
private static readonly List<string> AllowedDateParts = new List<string>()
public static readonly List<string> AllowedDateParts = new List<string>()
{
"Date", "Year", "Month", "Day", "Hour", "Minute", "Second", "Millisecond"
};

View File

@@ -23,11 +23,28 @@ namespace SqlSugar.MongoDb
{
var oldExp = expr;
var oldMember = expr as MemberExpression;
if (ExpressionTool.GetParameters(expr).Count == 0)
{
if (ExpressionTool.GetParameters(expr).Count == 0)
{
var value = ExpressionTool.GetMemberValue(oldMember.Member, oldExp);
return BsonValue.Create(value);
}
}
else if (!string.IsNullOrEmpty(BinaryExpressionTranslator.GetSystemDateMemberName(expr)))
{
var memberExp= (expr as MemberExpression);
var method = new MongoDbMethod() { context = _context };
var model = new MethodCallExpressionModel() { Args = new List<MethodCallExpressionArgs>() };
if (memberExp.Member.Name == "Date")
{
model.Args.Add(new MethodCallExpressionArgs() { MemberValue = memberExp.Expression });
return method.ToDateShort(model);
}
}
return ExtractFieldPath(expr);
}
private BsonValue ExtractFieldPath(Expression expr)
{
var parts = new Stack<string>();
while (expr is MemberExpression member)
@@ -40,7 +57,7 @@ namespace SqlSugar.MongoDb
{
_visitorContext.ExpType = typeof(MemberExpression);
}
if (parts.Count == 1&& expr is ParameterExpression parameter)
if (parts.Count == 1 && expr is ParameterExpression parameter)
{
if (_context?.context != null)
{

View File

@@ -4,6 +4,7 @@ using SqlSugar.MongoDb;
using System;
using System.Linq;
using System.Linq.Expressions;
using System.Text.RegularExpressions;
namespace SqlSugar.MongoDb
{
public class MongoDbExpressionContext : ExpressionContext, ILambdaExpressions
@@ -292,6 +293,17 @@ namespace SqlSugar.MongoDb
{ left.ToString(), regexDoc }
});
return match.ToJson(UtilMethods.GetJsonWriterSettings());
}
public override string ToDateShort(MethodCallExpressionModel model)
{
var item = model.Args.First().MemberValue;
BsonValue itemValue = new ExpressionVisitor(context).Visit(item as Expression);
var dateTruncDoc = new BsonDocument("$dateTrunc", new BsonDocument
{
{ "date", $"${itemValue}" },
{ "unit", "day" }
});
return dateTruncDoc.ToJson(UtilMethods.GetJsonWriterSettings());
}
}
}