Skip to content

Commit ab309fe

Browse files
committed
[修改]1. 修改DB的操作实现
1 parent 0243b50 commit ab309fe

File tree

9 files changed

+1769
-1558
lines changed

9 files changed

+1769
-1558
lines changed

DataBaseServer/GameFrameX.DataBase.Abstractions/IDatabaseService.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,14 @@ public interface IDatabaseService
116116
/// <returns>返回增加成功的条数</returns>
117117
Task<long> AddAsync<TState>(TState state) where TState : class, ICacheState, new();
118118

119+
/// <summary>
120+
/// 增加或更新数据
121+
/// </summary>
122+
/// <param name="state">数据对象</param>
123+
/// <typeparam name="TState">实现ICacheState接口的类型。</typeparam>
124+
/// <returns>修改的条数</returns>
125+
Task<long> AddOrUpdateAsync<TState>(TState state) where TState : class, ICacheState, new();
126+
119127
/// <summary>
120128
/// 保存多条数据
121129
/// </summary>
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,198 @@
1+
using GameFrameX.DataBase.Abstractions;
2+
using GameFrameX.Utility;
3+
using MongoDB.Driver;
4+
5+
namespace GameFrameX.DataBase.Mongo;
6+
7+
/// <summary>
8+
/// MongoDB服务连接类,实现了
9+
/// <see>
10+
/// <cref>IDatabaseService</cref>
11+
/// </see>
12+
/// 接口。
13+
/// </summary>
14+
public sealed partial class MongoDbService
15+
{
16+
#region 插入
17+
18+
/// <summary>
19+
/// 增加一条数据
20+
/// </summary>
21+
/// <param name="state"></param>
22+
/// <typeparam name="TState"></typeparam>
23+
/// <returns>返回修改的条数</returns>
24+
public async Task<long> AddAsync<TState>(TState state) where TState : class, ICacheState, new()
25+
{
26+
var collection = GetCollection<TState>();
27+
state.CreateTime = TimeHelper.UnixTimeMilliseconds();
28+
state.UpdateTime = state.CreateTime;
29+
var filter = Builders<TState>.Filter.Eq(BaseCacheState.UniqueId, state.Id);
30+
var result = await collection.ReplaceOneAsync(filter, state, ReplaceOptions);
31+
return result.ModifiedCount;
32+
}
33+
34+
/// <summary>
35+
/// 增加一个列表数据
36+
/// </summary>
37+
/// <param name="states"></param>
38+
/// <typeparam name="TState"></typeparam>
39+
public async Task AddListAsync<TState>(IEnumerable<TState> states) where TState : class, ICacheState, new()
40+
{
41+
var collection = GetCollection<TState>();
42+
var cacheStates = states.ToList();
43+
foreach (var cacheState in cacheStates)
44+
{
45+
cacheState.CreateTime = TimeHelper.UnixTimeMilliseconds();
46+
cacheState.UpdateTime = cacheState.CreateTime;
47+
}
48+
49+
await collection.InsertManyAsync(cacheStates);
50+
}
51+
52+
53+
/*
54+
/// <summary>
55+
/// 插入一条数据
56+
/// </summary>
57+
/// <typeparam name="TState"></typeparam>
58+
/// <param name="state">数据</param>
59+
public void InsertOne<TState>(TState state) where TState : ICacheState, new()
60+
{
61+
GetCollection<TState>().InsertOne(state);
62+
}*/
63+
64+
/*/// <summary>
65+
/// 插入一条数据
66+
/// </summary>
67+
/// <param name="collectionName">表名</param>
68+
/// <param name="doc">文档</param>
69+
public void InsertOne(string collectionName, BsonDocument doc)
70+
{
71+
GetCollection(collectionName).InsertOne(doc);
72+
}*/
73+
74+
/*
75+
/// <summary>
76+
/// 插入一条数据
77+
/// </summary>
78+
/// <typeparam name="TState"></typeparam>
79+
/// <param name="t">数据</param>
80+
public Task InsertOneAsync<TState>(TState t) where TState : ICacheState, new()
81+
{
82+
return GetCollection<TState>().InsertOneAsync(t);
83+
}
84+
*/
85+
86+
/*
87+
/// <summary>
88+
/// 插入一条数据
89+
/// </summary>
90+
/// <param name="collectionName">表名</param>
91+
/// <param name="doc">文档</param>
92+
public Task InsertOneAsync(string collectionName, BsonDocument doc)
93+
{
94+
return GetCollection(collectionName).InsertOneAsync(doc);
95+
}*/
96+
97+
/*/// <summary>
98+
/// 插入多条数据
99+
/// </summary>
100+
/// <typeparam name="TState"></typeparam>
101+
/// <param name="list">集合</param>
102+
public void InsertMany<TState>(IEnumerable<TState> list) where TState : ICacheState, new()
103+
{
104+
GetCollection<TState>().InsertMany(list);
105+
}*/
106+
107+
/*
108+
/// <summary>
109+
/// 插入多条数据
110+
/// </summary>
111+
/// <param name="collectionName">表名</param>
112+
/// <param name="list">Bson集合</param>
113+
public void InsertMany(string collectionName, IEnumerable<BsonDocument> list)
114+
{
115+
GetCollection(collectionName).InsertMany(list);
116+
}*/
117+
118+
/*/// <summary>
119+
/// 插入多条数据
120+
/// </summary>
121+
/// <typeparam name="TState"></typeparam>
122+
/// <param name="list">集合</param>
123+
public Task InsertManyAsync<TState>(IEnumerable<TState> list) where TState : ICacheState, new()
124+
{
125+
return GetCollection<TState>().InsertManyAsync(list);
126+
}*/
127+
128+
/*
129+
/// <summary>
130+
/// 插入多条数据
131+
/// </summary>
132+
/// <param name="collectionName">表名</param>
133+
/// <param name="list">Bson集合</param>
134+
public Task InsertManyAsync(string collectionName, IEnumerable<BsonDocument> list)
135+
{
136+
return GetCollection(collectionName).InsertManyAsync(list);
137+
}*/
138+
139+
/*
140+
/// <summary>
141+
/// 大批量插入数据
142+
/// </summary>
143+
/// <typeparam name="TState"></typeparam>
144+
/// <param name="list">数据集合</param>
145+
/// <returns></returns>
146+
public List<WriteModel<TState>> BulkInsert<TState>(IEnumerable<WriteModel<TState>> list) where TState : ICacheState, new()
147+
{
148+
var result = GetCollection<TState>().BulkWrite(list);
149+
return result.ProcessedRequests.ToList();
150+
}
151+
152+
/// <summary>
153+
/// 大批量插入数据
154+
/// </summary>
155+
/// <param name="collectionName">表名</param>
156+
/// <param name="list">Bson数据集合</param>
157+
/// <returns></returns>
158+
public List<WriteModel<BsonDocument>> BulkInsert(string collectionName, IEnumerable<WriteModel<BsonDocument>> list)
159+
{
160+
var result = GetCollection(collectionName).BulkWrite(list);
161+
return result.ProcessedRequests.ToList();
162+
}
163+
164+
/// <summary>
165+
/// 大批量插入数据
166+
/// </summary>
167+
/// <typeparam name="TState"></typeparam>
168+
/// <param name="list">数据集合</param>
169+
/// <returns></returns>
170+
public async Task<List<WriteModel<TState>>> BulkInsertAsync<TState>(IEnumerable<WriteModel<TState>> list) where TState : ICacheState, new()
171+
{
172+
var result = await GetCollection<TState>().BulkWriteAsync(list);
173+
return result.ProcessedRequests.ToList();
174+
}
175+
176+
/// <summary>
177+
/// 大批量插入数据
178+
/// </summary>
179+
/// <param name="collectionName">表名</param>
180+
/// <param name="list">Bson数据集合</param>
181+
/// <returns></returns>
182+
public async Task<List<WriteModel<BsonDocument>>> BulkInsertAsync(string collectionName, IEnumerable<WriteModel<BsonDocument>> list)
183+
{
184+
var result = await GetCollection(collectionName).BulkWriteAsync(list);
185+
return result.ProcessedRequests.ToList();
186+
}*/
187+
188+
#endregion 插入
189+
190+
/// <summary>
191+
/// 批量写入选项,用于批量写入文档。设置
192+
/// <see>
193+
/// <cref>IsOrdered</cref>
194+
/// </see>
195+
/// 属性为 false 可以并行执行写入操作。
196+
/// </summary>
197+
public static readonly BulkWriteOptions BulkWriteOptions = new() { IsOrdered = false };
198+
}

0 commit comments

Comments
 (0)