Update mongodb

This commit is contained in:
sunkaixuan 2025-06-16 17:12:22 +08:00
parent 92f5c68c57
commit c0ef4c4494
3 changed files with 73 additions and 11 deletions

View File

@ -51,6 +51,15 @@ namespace MongoDbTest
int32 = Convert.ToInt32(it.Age), int32 = Convert.ToInt32(it.Age),
dateTime = Convert.ToDateTime(it.CreateDateTime), dateTime = Convert.ToDateTime(it.CreateDateTime),
}).ToList(); ; }).ToList(); ;
var list4 = db.Queryable<Student>().Select(it => new
{
Day = it.CreateDateTime.AddDays(1),
Year = it.CreateDateTime.AddYears(1),
AddMonth = it.CreateDateTime.AddMonths(1)
}).ToList();
if (list4.First().Day.Date != dt.Date.AddDays(1)) Cases.ThrowUnitError();
if (list4.First().Year.Date != dt.Date.AddYears(1)) Cases.ThrowUnitError();
if (list4.First().AddMonth.Date != dt.Date.AddMonths(1)) Cases.ThrowUnitError();
} }
[SqlSugar.SugarTable("UnitStudent1231sds3z1")] [SqlSugar.SugarTable("UnitStudent1231sds3z1")]
public class Student : MongoDbBase public class Student : MongoDbBase

View File

@ -28,17 +28,17 @@ namespace SqlSugar.MongoDb
if (name == "ToDateTime") if (name == "ToDateTime")
name = "ToDate"; name = "ToDate";
BsonValue result = null; BsonValue result = null;
if (typeof(IDbMethods).GetMethods().Any(it => it.Name == name)) var context = new MongoDbMethod() { context = this._context };
{
var context = new MongoDbMethod() { context=this._context};
MethodCallExpressionModel model = new MethodCallExpressionModel(); MethodCallExpressionModel model = new MethodCallExpressionModel();
var args= methodCallExpression.Arguments; var args = methodCallExpression.Arguments;
model.Args = new List<MethodCallExpressionArgs>(); model.Args = new List<MethodCallExpressionArgs>();
model.DataObject = methodCallExpression.Object; model.DataObject = methodCallExpression.Object;
foreach (var item in args) foreach (var item in args)
{ {
model.Args.Add(new MethodCallExpressionArgs() { MemberValue = item }); model.Args.Add(new MethodCallExpressionArgs() { MemberValue = item });
} }
if (typeof(IDbMethods).GetMethods().Any(it => it.Name == name))
{
if (name == nameof(ToString)) if (name == nameof(ToString))
{ {
var funcString = context.ToString(model); var funcString = context.ToString(model);
@ -55,6 +55,29 @@ namespace SqlSugar.MongoDb
result = UtilMethods.MyCreate(funcString); result = UtilMethods.MyCreate(funcString);
} }
} }
else if (name.StartsWith("Add"))
{
// 根据方法名推断DateType
DateType dateType = DateType.Minute;
if (name.Equals("AddDays", StringComparison.OrdinalIgnoreCase))
dateType = DateType.Day;
else if (name.Equals("AddHours", StringComparison.OrdinalIgnoreCase))
dateType = DateType.Hour;
else if (name.Equals("AddMinutes", StringComparison.OrdinalIgnoreCase))
dateType = DateType.Minute;
else if (name.Equals("AddSeconds", StringComparison.OrdinalIgnoreCase))
dateType = DateType.Second;
else if (name.Equals("AddMilliseconds", StringComparison.OrdinalIgnoreCase))
dateType = DateType.Millisecond;
else if (name.Equals("AddMonths", StringComparison.OrdinalIgnoreCase))
dateType = DateType.Month;
else if (name.Equals("AddYears", StringComparison.OrdinalIgnoreCase))
dateType = DateType.Year;
// 追加DateType参数
model.Args.Add(new MethodCallExpressionArgs() { MemberValue = dateType });
var value = context.DateAddByType(model);
result = BsonDocument.Parse(value?.ToString());
}
return result; return result;
} }
} }

View File

@ -363,6 +363,36 @@ namespace SqlSugar.MongoDb
}); });
return dateTruncDoc.ToJson(UtilMethods.GetJsonWriterSettings()); return dateTruncDoc.ToJson(UtilMethods.GetJsonWriterSettings());
} }
public override string DateAddByType(MethodCallExpressionModel model)
{
var dateExpr = model.DataObject;
var numberExpr = model.Args[0].MemberValue;
var typeExpr = model.Args[1].MemberValue;
BsonValue dateValue = new ExpressionVisitor(context).Visit(dateExpr as Expression);
BsonValue numberValue = new ExpressionVisitor(context).Visit(numberExpr as Expression);
var dateType = (DateType)typeExpr;
string unit = dateType switch
{
DateType.Year => "year",
DateType.Month => "month",
DateType.Day => "day",
DateType.Hour => "hour",
DateType.Minute => "minute",
DateType.Second => "second",
DateType.Millisecond => "millisecond",
_ => throw new NotSupportedException($"不支持的DateType: {dateType}")
};
var dateAddDoc = new BsonDocument("$dateAdd", new BsonDocument
{
{ "startDate", $"${dateValue}" },
{ "unit", unit },
{ "amount", numberValue }
});
return dateAddDoc.ToJson(UtilMethods.GetJsonWriterSettings());
}
public override string DateValue(MethodCallExpressionModel model) public override string DateValue(MethodCallExpressionModel model)
{ {
var item = model.Args.First().MemberValue; var item = model.Args.First().MemberValue;