Compare commits

...

9 Commits

Author SHA1 Message Date
sunkaixuan
fb7c2e387e Add demo 2025-08-08 17:06:55 +08:00
sunkaixuan
97b6cc3b39 Update demo 2025-08-08 17:05:51 +08:00
sunkaixuan
a76036864c Update create database 2025-08-08 16:05:48 +08:00
sunkaixuan
1d0c58681f Update demo 2025-08-08 15:59:55 +08:00
sunkaixuan
a4c1e8fd51 Update demo 2025-08-08 15:53:06 +08:00
sunkaixuan
6226a9e296 Add demo 2025-08-08 15:51:59 +08:00
sunkaixuan
5bcb3018c6 Optimize the code 2025-08-08 15:28:49 +08:00
sunkaixuan
20c4bec503 Update demo 2025-08-08 13:17:30 +08:00
sunkaixuan
75189aa220 Update mongodb 2025-08-08 13:16:31 +08:00
10 changed files with 256 additions and 56 deletions

View File

@ -18,6 +18,8 @@ namespace MongoDbTest
QueryJson.Init();
QueryJson2.Init();
QueryJson3.Init();
QueryJson4.Init();
QueryJson5.Init();
QueryLeftJoin.Init();
QueryLeftJoin2.Init();
QueryLeftJoin3.Init();

View File

@ -16,10 +16,11 @@ namespace MongoDbTest
var db = DbHelper.GetNewDb();
db.CodeFirst.InitTables<Student>();
db.DbMaintenance.TruncateTable<Student>();
var dt = DateTime.Now;
db.Insertable(new Student()
{
Age = 1,
Book = new Book() { SchoolId = ObjectId.GenerateNewId().ToString() }
Book = new Book() { SchoolId = ObjectId.GenerateNewId().ToString(),DateTime=dt}
}).ExecuteCommand();
var data = db.Queryable<Student>().First();
var list=db.Queryable<Student>().Where(s => s.Book.SchoolId == data.Book.SchoolId).ToList();
@ -27,6 +28,7 @@ namespace MongoDbTest
var ids = new List<string>() { data.Book.SchoolId};
var list2 = db.Queryable<Student>().Where(s => ids.Contains( s.Book.SchoolId ) ).ToList();
if (list2.Any() == false) Cases.ThrowUnitError();
if(data.Book.DateTime.ToString("yyyy-MM-dd HH:mm:ss.fff") != dt.ToString("yyyy-MM-dd HH:mm:ss.fff")) Cases.ThrowUnitError();
}
[SqlSugar.SugarTable("UnitStudentdddd1")]
@ -51,6 +53,7 @@ namespace MongoDbTest
public string SchoolId { get; set; }
public decimal BookId { get; set; }
public DateTime DateTime { get; set; }
}
}

View File

@ -0,0 +1,44 @@

using SqlSugar;
namespace MongoDbTest
{
public class QueryJson3
{
public static void Init()
{
var db = DbHelper.GetNewDb();
db.DbMaintenance.TruncateTable<NoticeEntity>();
db.Insertable<NoticeEntity>(new NoticeEntity() { Id = 12312312L, NoticeTitle = "88888", noticeContentInfos = new List<NoticeContentInfo>() { new NoticeContentInfo { SubjectId = 1 } } }).ExecuteCommand();
var da = db.Updateable<NoticeEntity>()
.SetColumns(it => new NoticeEntity { NoticeTitle = "66666" }, true).Where(it => it.Id == 12312312L)
.ExecuteCommand() > 0;
}
}
}
/// <summary>
/// 通知公告
/// </summary>
[SugarTable("NoticeInfoComponent")]
public class NoticeEntity
{
[SugarColumn(ColumnName = "_id")]
public long Id { get; set; }
/// <summary>
/// 通知公告标题
/// </summary>
public string NoticeTitle { get; set; } = null!;
/// <summary>
/// 通知公告内容
/// </summary>
[SugarColumn(IsJson = true)]
public List<NoticeContentInfo> noticeContentInfos { get; set; } = null!;
}
public class NoticeContentInfo
{
/// <summary>
/// 模块
/// </summary>
public int SubjectId { get; set; }
}

View File

@ -0,0 +1,69 @@
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson;
using SqlSugar.MongoDb;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MongoDbTest
{
public class QueryJson4
{
internal static void Init()
{
var db = DbHelper.GetNewDb();
db.CodeFirst.InitTables<Student>();
db.DbMaintenance.TruncateTable<Student>();
var dt = DateTime.Now;
db.Insertable(new Student()
{
Age = 1,
Book = new Book()
{
SchoolId = 1,
Book2 = new Book() { SchoolId=1,Book2 = new Book() { SchoolId = 2 } }
}
}).ExecuteCommand();
db.Insertable(new Student()
{
Age = 1,
Book = new Book()
{
SchoolId = 222,
Book2 = new Book() { SchoolId = 222, Book2 = new Book() { SchoolId = 2 } }
}
}).ExecuteCommand();
var data1 = db.Queryable<Student>().Where(s=>s.Book.Book2.SchoolId==1).ToList();
var data2 = db.Queryable<Student>().Where(s => s.Book.Book2.Book2.SchoolId == 2).ToList();
if (data1.Count() != 1 || data1.Count() != 1) Cases.Init();
if (data1.First().Book.Book2.SchoolId != 1) Cases.Init();
if (data2.First().Book.Book2.Book2.SchoolId != 2) Cases.Init();
}
[SqlSugar.SugarTable("UnitStudentd23351")]
public class Student : MongoDbBase
{
public string Name { get; set; }
public string SchoolId { get; set; }
public int Age { get; set; }
public DateTime CreateDateTime { get; set; }
[SqlSugar.SugarColumn(IsJson = true)]
public Book Book { get; set; }
}
public class Book
{
public int SchoolId { get; set; }
[SqlSugar.SugarColumn(IsJson = true)]
public Book Book2 { get; set; }
}
}
}

View File

@ -0,0 +1,69 @@
using MongoDB.Bson.Serialization.Attributes;
using MongoDB.Bson;
using SqlSugar.MongoDb;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MongoDbTest
{
public class QueryJson5
{
internal static void Init()
{
var db = DbHelper.GetNewDb();
db.CodeFirst.InitTables<Student>();
db.DbMaintenance.TruncateTable<Student>();
var dt = DateTime.Now;
db.Insertable(new Student()
{
Age = 1,
Book = new Book()
{
Id = 1,
Book2 = new Book() { Id = 1, Book2 = new Book() { Id = 2 } }
}
}).ExecuteCommand();
db.Insertable(new Student()
{
Age = 1,
Book = new Book()
{
Id = 222,
Book2 = new Book() { Id = 222, Book2 = new Book() { Id = 2 } }
}
}).ExecuteCommand();
var data1 = db.Queryable<Student>().Where(s => s.Book.Book2.Id == 1).ToList();
var data2 = db.Queryable<Student>().Where(s => s.Book.Book2.Book2.Id == 2).ToList();
if (data1.Count() != 1 || data1.Count() != 1) Cases.Init();
if (data1.First().Book.Book2.Id != 1) Cases.Init();
if (data2.First().Book.Book2.Book2.Id != 2) Cases.Init();
}
[SqlSugar.SugarTable("UnitStudentd2dfhj351")]
public class Student : MongoDbBase
{
public string Name { get; set; }
public string SchoolId { get; set; }
public int Age { get; set; }
public DateTime CreateDateTime { get; set; }
[SqlSugar.SugarColumn(IsJson = true)]
public Book Book { get; set; }
}
public class Book
{
public int Id { get; set; }
[SqlSugar.SugarColumn(IsJson = true)]
public Book Book2 { get; set; }
}
}
}

View File

@ -1,44 +0,0 @@

using MongoDbTest;
using SqlSugar;
public class QueryJson3
{
public static void Init()
{
var db = DbHelper.GetNewDb();
db.DbMaintenance.TruncateTable<NoticeEntity>();
db.Insertable<NoticeEntity>(new NoticeEntity() { Id = 12312312L, NoticeTitle = "88888", noticeContentInfos = new List<NoticeContentInfo>() { new NoticeContentInfo { SubjectId = 1 } } }).ExecuteCommand();
var da = db.Updateable<NoticeEntity>()
.SetColumns(it => new NoticeEntity { NoticeTitle = "66666" },true ).Where(it => it.Id == 12312312L)
.ExecuteCommand() > 0;
}
}
/// <summary>
/// 通知公告
/// </summary>
[SugarTable("NoticeInfoComponent")]
public class NoticeEntity
{
[SugarColumn(ColumnName = "_id")]
public long Id { get; set; }
/// <summary>
/// 通知公告标题
/// </summary>
public string NoticeTitle { get; set; } = null!;
/// <summary>
/// 通知公告内容
/// </summary>
[SugarColumn(IsJson = true)]
public List<NoticeContentInfo> noticeContentInfos { get; set; } = null!;
}
public class NoticeContentInfo
{
/// <summary>
/// 模块
/// </summary>
public int SubjectId { get; set; }
}

View File

@ -12,11 +12,11 @@ namespace SqlSugar.MongoDb
{
private BsonDocument GetComparisonOperation(BinaryExpression expr, BsonValue field, BsonValue value, bool leftIsMember, bool rightIsMember, string op)
{
var isLeftValue = IsLeftValue(leftIsMember, rightIsMember, op);
var isRightValue = IsRightValue(leftIsMember, rightIsMember, op);
var isKeyValue = isLeftValue || isRightValue;
var isLeftMember = IsLeftValue(leftIsMember, rightIsMember, op);
var isRightMember = IsRightValue(leftIsMember, rightIsMember, op);
var isKeyValue = isLeftMember || isRightMember;
if (isKeyValue)
return ComparisonKeyValue(expr, field, value, op, isLeftValue);
return ComparisonKeyValue(expr, field, value, op, isLeftMember);
else
return ComparisonNotKeyValue(field, value, op);
}
@ -37,11 +37,11 @@ namespace SqlSugar.MongoDb
};
}
private BsonDocument ComparisonKeyValue(BinaryExpression expr, BsonValue field, BsonValue value, string op, bool isLeftValue)
private BsonDocument ComparisonKeyValue(BinaryExpression expr, BsonValue field, BsonValue value, string op, bool isLeftMember)
{
string leftValue = isLeftValue ? field.ToString() : value.ToString();
BsonValue rightValue = isLeftValue ? value: field;
var expression = isLeftValue ? MongoDbExpTools.RemoveConvert(expr.Left) as MemberExpression : MongoDbExpTools.RemoveConvert(expr.Right) as MemberExpression;
string leftValue = isLeftMember ? field.ToString() : value.ToString();
BsonValue rightValue = isLeftMember ? value: field;
var expression = isLeftMember ? MongoDbExpTools.RemoveConvert(expr.Left) as MemberExpression : MongoDbExpTools.RemoveConvert(expr.Right) as MemberExpression;
EntityColumnInfo CurrentColumnInfo = null;
Type iSugarDataConverterType=UtilConstants.StringType;
leftValue = GetLeftValue(leftValue, expression, ref CurrentColumnInfo);

View File

@ -75,7 +75,14 @@ namespace SqlSugar.MongoDb
while (expr is MemberExpression member)
{
parts.Push(member.Member.Name);
if (member.Member.Name.EqualCase("Id"))
{
parts.Push("_id");
}
else
{
parts.Push(member.Member.Name);
}
expr = member.Expression!;
}

View File

@ -334,7 +334,13 @@ namespace SqlSugar.MongoDb
string result = string.Format(this.AlterColumnToTableSql, tableName, columnName, dataType, dataSize, nullType, primaryKey, identity);
return result;
}
public override bool CreateDatabase(string databaseDirectory = null)
{
var newdb = this.Context.CopyNew();
newdb.Open();
newdb.Close();
return true;
}
/// <summary>
///by current connection string
/// </summary>

View File

@ -49,6 +49,7 @@ namespace SqlSugar.MongoDb
}
var array = new BsonArray(list);
ConvertBsonDateTimeToLocal(array);
return array.ToJson(UtilMethods.GetJsonWriterSettings());
}
else
@ -56,6 +57,7 @@ namespace SqlSugar.MongoDb
var realType = it.GetType();
var bson = it.ToBson(realType); // → byte[]
var doc = BsonSerializer.Deserialize<BsonDocument>(bson); // → BsonDocument
ConvertBsonDateTimeToLocal(doc);
var json = doc.ToJson(UtilMethods.GetJsonWriterSettings());
return json;
}
@ -204,7 +206,49 @@ namespace SqlSugar.MongoDb
return json;
}
};
}
}
private void ConvertBsonDateTimeToLocal(BsonValue bsonValue)
{
if (bsonValue == null || bsonValue.IsBsonNull)
return;
if (bsonValue.IsBsonDocument)
{
var doc = bsonValue.AsBsonDocument;
foreach (var element in doc.Elements.ToList())
{
var val = element.Value;
if (val.BsonType == BsonType.DateTime)
{
var utcDate = val.ToUniversalTime();
var localDate = utcDate.ToLocalTime();
doc[element.Name] =UtilMethods.MyCreate(localDate);
}
else
{
ConvertBsonDateTimeToLocal(val);
}
}
}
else if (bsonValue.IsBsonArray)
{
var array = bsonValue.AsBsonArray;
for (int i = 0; i < array.Count; i++)
{
var val = array[i];
if (val.BsonType == BsonType.DateTime)
{
var utcDate = val.ToUniversalTime();
var localDate = utcDate.ToLocalTime();
array[i] = new BsonDateTime(localDate);
}
else
{
ConvertBsonDateTimeToLocal(val);
}
}
}
}
public override string SqlTemplate
{
get