mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-06-28 13:34:32 +08:00
Update mongodb
This commit is contained in:
parent
f5b0319b5d
commit
62498438f5
@ -11,15 +11,52 @@ namespace MongoDbTest
|
|||||||
{
|
{
|
||||||
public static void Init()
|
public static void Init()
|
||||||
{
|
{
|
||||||
|
//创建DB
|
||||||
var db = DBHelper.DbHelper.GetNewDb();
|
var db = DBHelper.DbHelper.GetNewDb();
|
||||||
db.CodeFirst.InitTables<Student>();
|
|
||||||
db.DbMaintenance.TruncateTable<Student>();
|
//初始化数据
|
||||||
db.Insertable(new Student() { Name = "jack",Bool=true, SchoolId =2 }).ExecuteCommand();
|
InitializeStudentData(db);
|
||||||
db.Insertable(new Student() { Name = "tom_null", Bool = false,BoolNull=true, SchoolId =3 ,SchoolIdNull=4}).ExecuteCommand();
|
|
||||||
var list=db.Queryable<Student>().ToList();
|
//null类型测试
|
||||||
|
ValidateStudentData(db);
|
||||||
|
|
||||||
|
//函数
|
||||||
|
FilterStudentsByFunc(db);
|
||||||
|
|
||||||
|
//根据bool过滤
|
||||||
|
FilterStudentsByBool(db);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void FilterStudentsByBool(SqlSugar.SqlSugarClient db)
|
||||||
|
{
|
||||||
|
//bool类型测试
|
||||||
|
|
||||||
|
var list1 = db.Queryable<Student>().Where(it => it.Bool == true).ToList();
|
||||||
|
//var list2 = db.Queryable<Student>().Where(it => it.Bool).ToList();
|
||||||
|
//var list3 = db.Queryable<Student>().Where(it => !it.Bool).ToList();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void FilterStudentsByFunc(SqlSugar.SqlSugarClient db)
|
||||||
|
{
|
||||||
|
var list = db.Queryable<Student>().Where(it => it.Name.Contains("ck")).ToList();
|
||||||
|
if (!list.First().Name.Contains("ck")) Cases.ThrowUnitError();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void ValidateStudentData(SqlSugar.SqlSugarClient db)
|
||||||
|
{
|
||||||
|
var list = db.Queryable<Student>().ToList();
|
||||||
if (list.First() is { } first && (first.BoolNull != null || first.SchoolIdNull != null)) Cases.ThrowUnitError();
|
if (list.First() is { } first && (first.BoolNull != null || first.SchoolIdNull != null)) Cases.ThrowUnitError();
|
||||||
if (list.Last() is { } last && (last.BoolNull != true || last.SchoolIdNull != 4)) Cases.ThrowUnitError();
|
if (list.Last() is { } last && (last.BoolNull != true || last.SchoolIdNull != 4)) Cases.ThrowUnitError();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void InitializeStudentData(SqlSugar.SqlSugarClient db)
|
||||||
|
{
|
||||||
|
db.CodeFirst.InitTables<Student>();
|
||||||
|
db.DbMaintenance.TruncateTable<Student>();
|
||||||
|
db.Insertable(new Student() { Name = "jack", Bool = true, SchoolId = 2 }).ExecuteCommand();
|
||||||
|
db.Insertable(new Student() { Name = "tom_null", Bool = false, BoolNull = true, SchoolId = 3, SchoolIdNull = 4 }).ExecuteCommand();
|
||||||
|
}
|
||||||
|
|
||||||
[SqlSugar.SugarTable("UnitStudent1ssss23s131")]
|
[SqlSugar.SugarTable("UnitStudent1ssss23s131")]
|
||||||
public class Student : MongoDbBase
|
public class Student : MongoDbBase
|
||||||
{
|
{
|
||||||
|
@ -32,6 +32,7 @@ namespace SqlSugar.MongoDb
|
|||||||
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;
|
||||||
foreach (var item in args)
|
foreach (var item in args)
|
||||||
{
|
{
|
||||||
model.Args.Add(new MethodCallExpressionArgs() { MemberValue = item });
|
model.Args.Add(new MethodCallExpressionArgs() { MemberValue = item });
|
||||||
|
@ -240,5 +240,22 @@ namespace SqlSugar.MongoDb
|
|||||||
context.queryBuilder.LambdaExpressions.Index++;
|
context.queryBuilder.LambdaExpressions.Index++;
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
public override string Contains(MethodCallExpressionModel model)
|
||||||
|
{
|
||||||
|
var item = model.Args.First().MemberValue;
|
||||||
|
BsonValue right = new ExpressionVisitor(context).Visit(item as Expression);
|
||||||
|
BsonValue left = new ExpressionVisitor(context).Visit(model.DataObject as Expression);
|
||||||
|
// 构造 $regex 匹配
|
||||||
|
var regexDoc = new BsonDocument
|
||||||
|
{
|
||||||
|
{ "$regex", right }, // right 是普通字符串值,例如 "a"
|
||||||
|
{ "$options", "i" } // 忽略大小写
|
||||||
|
};
|
||||||
|
var match = new BsonDocument("$match", new BsonDocument
|
||||||
|
{
|
||||||
|
{ left.ToString(), regexDoc }
|
||||||
|
});
|
||||||
|
return match.ToJson(UtilMethods.GetJsonWriterSettings());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,9 +64,18 @@ namespace SqlSugar.MongoDb
|
|||||||
trimmed = trimmed.Substring(5).TrimStart();
|
trimmed = trimmed.Substring(5).TrimStart();
|
||||||
else if (trimmed.StartsWith("AND", StringComparison.OrdinalIgnoreCase))
|
else if (trimmed.StartsWith("AND", StringComparison.OrdinalIgnoreCase))
|
||||||
trimmed = trimmed.Substring(3).TrimStart();
|
trimmed = trimmed.Substring(3).TrimStart();
|
||||||
|
if (IsFieldNameJson(trimmed))
|
||||||
|
{
|
||||||
|
var outerDoc = BsonDocument.Parse(trimmed);
|
||||||
|
trimmed = outerDoc["fieldName"].AsString;
|
||||||
|
operations.Add(trimmed);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
// item 是 JSON 格式字符串,直接包进 $match
|
// item 是 JSON 格式字符串,直接包进 $match
|
||||||
operations.Add($"{{ \"$match\": {trimmed} }}");
|
operations.Add($"{{ \"$match\": {trimmed} }}");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Page
|
#region Page
|
||||||
@ -192,6 +201,12 @@ namespace SqlSugar.MongoDb
|
|||||||
|
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool IsFieldNameJson(string trimmed)
|
||||||
|
{
|
||||||
|
return trimmed.StartsWith("{ \"fieldName\" : ");
|
||||||
|
}
|
||||||
|
|
||||||
public override string ToCountSql(string sql)
|
public override string ToCountSql(string sql)
|
||||||
{
|
{
|
||||||
sql=sql.TrimEnd(']');
|
sql=sql.TrimEnd(']');
|
||||||
|
Loading…
Reference in New Issue
Block a user