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