数据库操作¶
我们目前采用MongoDB作为主要数据库,但未来我们计划扩展,支持更多类型的数据库,以满足不同业务需求和更复杂的数据处理场景。
框架中的实体(Entity)对象可以直接映射到数据库,实现数据的持久化存储和读取操作。通过这种方式,开发者无需编写额外的代码来处理数据库操作,只需专注于业务逻辑,极大简化了数据访问层的开发工作。
如何操作DB¶
用户只需获取当前的Scene,然后通过该Scene所关联的World对象来访问相应的数据库。
Count¶
在指定集合中检索符合给定筛选条件的特定类型实体数量。该方法接受一个泛型参数,表示要查询的实体类型,并根据此类型对集合中的实体进行筛选与计数。
该方法有两个重载:
- Count(string collection = null)
- Count(Expression filter, string collection = null)
参数说明:
- filter:检索的表达式树。
- collection:要检索的表名,不输入会默认拿泛型的类型当做表名。
Count
var worldDateBase = scene.World.DateBase;
// 统计数据库User表里的总数
var userCount = await worldDateBase.Count<User>();
Log.Debug($"查询到当前的User总数为: {userCount}");
// 统计数据库User表里Age大于等于20的总数
var userAgeCount = await worldDateBase.Count<User>(d => d.Age >= 20);
Log.Debug($"查询到当前的User.Age大于等于20的总数为: {userAgeCount}");
Exist¶
该方法用于检查指定集合中是否存在特定类型的实体。它接受一个泛型参数,用于指定要查询的实体类型,并返回一个布尔值,指示该类型的实体是否存在于集合中。
该方法有两个重载:
- Exist(string collection = null)
- Exist(Expression filter, string collection = null)
参数说明:
- filter:检索的表达式树。
- collection:要检索的表名,不输入会默认拿泛型的类型当做表名。
Count
Query¶
Query¶
从指定的集合中检索特定类型的实体。该方法接受一个泛型参数,用于指定要查询的实体类型,并返回与该类型匹配的一个或多个实体对象。
该方法有四个重载:
- Query(long id, string collection = null)
- Query(Expression filter, string collection = null)
- Query(long id, List collectionNames, List result)
- Query(Expression filter, string[] cols, string collection = null)
参数说明:
- id:需要查找的实体Id。
- cols:需要返回实体的字段或属性。
- filter:查找的表达式树。
- collection:查找的表名,不输入会默认拿泛型的类型当做表名。
- collectionNames:要查询多个表的表名的数组。
- result:配合collectionNames参数使用,会把查询到的数据存放到result的数组中。
Query
var worldDateBase = scene.World.DateBase;
// 查找数据库User表里Id为1的数据
var user = await worldDateBase.Query<User>(1);
// 查找数据库User表里Age大于等于20的User,并返回一个数组。
List<User> user = await worldDateBase.Query<User>(d => d.Age >= 20);
// 查找数据库User表里Age大于等于20的User,并返回一个数组。只返回Age和Name两个字段或属性的数据。
List<User> user = await worldDateBase.Query<User>(d => d.Age >= 20,"Age,Name");
// 查找User和Bag两个表里Id等于1的数据,并添加到result数组中。
var result = new List<Entity>();
var collectionNames = new List<string>
{
"User",
"Bag"
};
await worldDateBase.Query(1L, collectionNames, result);
QueryOrderBy¶
从指定的集合中检索特定类型的实体。该方法接受一个泛型参数,用于指定要查询的实体类型,并返回与该类型匹配的一个或多个实体对象。与 Query 方法不同的是,该方法额外支持排序功能,使用户能够根据指定的字段对查询结果进行排序。
该方法有一个重载:
- QueryOrderBy(Expression filter, Expression orderByExpression, bool isAsc = true, string collection = null)
参数说明:
- filter:查找的表达式树。
- orderByExpression:需要进行排序的表达式树。
- isAsc:升序还是降序默认是升序。
- collection:查找的表名,不输入会默认拿泛型的类型当做表名。
QueryOrderBy
QueryByPage¶
分页查询指定集合中满足给定筛选条件的类型的实体列表,该方法接受一个泛型参数,用于指定要查询的实体类型,并返回与该类型匹配的一个或多个实体对象。
该方法有二个重载:
- QueryByPage(Expression filter, int pageIndex, int pageSize, string collection = null)
- QueryByPage(Expression filter, int pageIndex, int pageSize, string[] cols, string collection = null)
参数说明:
- filter:查找的表达式树。
- pageIndex:当前页。
- pageSize:每页大小。
- cols:需要返回实体的字段或属性。
- collection:查找的表名,不输入会默认拿泛型的类型当做表名。
QueryByPage
var worldDateBase = scene.World.DateBase;
// 查找数据库User表里Age大于等于20的User的数据,返回第一页的10条数据。
List<User> user = await worldDateBase.QueryByPage<User>(d => d.Age >= 20,1,10);
// 查找数据库User表里Age大于等于20的User,返回第一页的10条数据,只返回Age和Name两个字段或属性的数据。
List<User> user = await worldDateBase.QueryByPage<User>(d => d.Age >= 20,1,10,"Age,Name");
QueryByPageOrderBy¶
该方法用于分页查询指定集合中符合给定筛选条件的实体列表。它接受一个泛型参数,以指定要查询的实体类型,并返回与该类型匹配的一个或多个实体对象。与 QueryByPage 方法不同的是,该方法额外支持排序功能,使用户能够根据指定的字段对查询结果进行排序。
该方法有一个重载:
- QueryByPageOrderBy(Expression filter, int pageIndex, int pageSize, Expression orderByExpression, bool isAsc = true, string collection = null)
参数说明:
- filter:查找的表达式树。
- pageIndex:当前页。
- pageSize:每页大小。
- orderByExpression:需要进行排序的表达式树。
- isAsc:升序还是降序默认是升序。
- collection:查找的表名,不输入会默认拿泛型的类型当做表名。
QueryByPageOrderBy
First¶
此方法通过接受一个泛型参数来指定要查询的实体类型,并根据给定的筛选条件检索该类型的第一个符合条件的实体对象。它将返回一个与指定类型相匹配的实体,确保检索的结果符合所要求的条件。
该方法有二个重载:
- First(Expression filter, string collection = null)
- First(string json, string[] cols, string collection = null)
参数说明:
- filter:查找的表达式树。
- cols:需要返回实体的字段或属性。
- json:通过Json格式进行查询(几乎用不到)。
- collection:查找的表名,不输入会默认拿泛型的类型当做表名。
First
Insert¶
向指定集合中插入一个类型实体,如果集合不存在将自动创建。该方法接受一个泛型参数,用于指定要插入的实体类型。
该方法有一个重载:
- Insert(T entity, string collection = null)
参数说明:
- entity:要插入的实体。
- collection:查找的表名,不输入会默认拿泛型的类型当做表名。
Insert
InsertBatch¶
批量插入一组实体到指定集合中。该方法接受一个泛型参数,用于指定要插入的实体类型。
该方法有两个重载:
- InsertBatch<(IEnumerable list, string collection = null)
- InsertBatch(object transactionSession, IEnumerable list, string collection = null)
参数说明:
- list:要插入的实体数组。
- transactionSession:事务会话对象,具体可以查询MongoDB官网如何创建一个事务。
- collection:查找的表名,不输入会默认拿泛型的类型当做表名。
InsertBatch
Save¶
保存修改类型实体到指定集合中,如果集合不存在将自动创建。该方法接受一个泛型参数,用于指定要保存的实体类型。
该方法有三个重载:
- Save(T entity, string collection = null)
- Save(long id, List entities);
- Save(object transactionSession, T entity, string collection = null)
参数说明:
- entity:要保存的实体。
- id:指定要保存的实体Id。
- transactionSession:事务会话对象,具体可以查询MongoDB官网如何创建一个事务。
- collection:查找的表名,不输入会默认拿泛型的类型当做表名。
InsertBatch
Remove¶
数据库中删除指定类型的实体。该方法接受一个泛型参数,用于指定要删除的实体类型。
该方法有四个重载:
- Remove(long id, string collection = null)
- Remove(object transactionSession, long id, string collection = null)
- Remove(long id, Expression filter, string collection = null)
- Remove(long id,object transactionSession, Expression filter, string collection = null)
参数说明:
- filter:删除条件的表达式数。
- id:指定要删除的实体Id。
- coroutineLockQueueKey:异步锁的Id,用于避免异步出现的一些奇怪问题。
- transactionSession:事务会话对象,具体可以查询MongoDB官网如何创建一个事务。
- collection:查找的表名,不输入会默认拿泛型的类型当做表名。
Remove
Sum¶
对满足条件的文档中的某个数值字段进行求和操作。
该方法有一个重载:
- Sum(Expression filter, Expression sumExpression, string collection = null)
参数说明:
- filter:参与统计条件的表达式数。
- sumExpression:参与统计的某个字段的表达式树。
- collection:查找的表名,不输入会默认拿泛型的类型当做表名。
Sum
CreateIndex¶
在指定的集合中创建索引,以提高类型实体的查询性能。
该方法有两个重载:
- CreateIndex(params object[] keys)
- CreateIndex(string collection, params object[] keys)
具体使用方法参见MongoDB官网文档,这里只是提供了这个接口。
CreateDB¶
创建指定类型的数据库表,用于存储实体。
该方法有两个重载:
- CreateDB
() 该方法接受一个泛型参数,用于指定要创建表的实体类型。 - CreateDB(Type type)
参数说明:
- Type:要创建表的类型,创建成功后会以Type的名字做为表名。