MongoDbClient.cs 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199
  1. using Masuit.Tools.Systems;
  2. using MongoDB.Bson;
  3. using MongoDB.Driver;
  4. using System;
  5. using System.Collections.Concurrent;
  6. using System.Collections.Generic;
  7. using System.Configuration;
  8. using System.Linq;
  9. using System.Linq.Expressions;
  10. using System.Runtime.Remoting.Messaging;
  11. using System.Threading.Tasks;
  12. namespace Masuit.Tools.NoSQL.MongoDBClient
  13. {
  14. public class MongoDbClient
  15. {
  16. public MongoClient Client { get; set; }
  17. public IMongoDatabase Database { get; set; }
  18. private static ConcurrentDictionary<string, MongoDbClient> InstancePool { get; set; } = new ConcurrentDictionary<string, MongoDbClient>();
  19. private static ConcurrentDictionary<string, ConcurrentLimitedQueue<MongoDbClient>> InstanceQueue { get; set; } = new ConcurrentDictionary<string, ConcurrentLimitedQueue<MongoDbClient>>();
  20. private MongoDbClient(string url, string database)
  21. {
  22. Client = new MongoClient(url);
  23. Database = Client.GetDatabase(database);
  24. }
  25. private MongoDbClient(MongoClientSettings settings, string database)
  26. {
  27. Client = new MongoClient(settings);
  28. Database = Client.GetDatabase(database);
  29. }
  30. /// <summary>
  31. /// 获取mongo单例
  32. /// </summary>
  33. /// <param name="url">连接字符串</param>
  34. /// <param name="database">数据库</param>
  35. /// <returns></returns>
  36. public static MongoDbClient GetInstance(string url, string database)
  37. {
  38. InstancePool.TryGetValue(url + database, out var instance);
  39. if (instance is null)
  40. {
  41. instance = new MongoDbClient(url, database);
  42. InstancePool.TryAdd(url + database, instance);
  43. }
  44. return instance;
  45. }
  46. /// <summary>
  47. /// 获取mongo默认单例
  48. /// </summary>
  49. /// <param name="url">连接字符串</param>
  50. /// <param name="database">数据库</param>
  51. /// <returns></returns>
  52. public static MongoDbClient GetDefaultInstance(string database)
  53. {
  54. string cs = ConfigurationManager.ConnectionStrings["MongoDB"].ConnectionString ?? "mongodb://127.0.0.1:27017";
  55. InstancePool.TryGetValue(cs + database, out var instance);
  56. if (instance is null)
  57. {
  58. instance = new MongoDbClient(cs, database);
  59. InstancePool.TryAdd(cs + database, instance);
  60. }
  61. return instance;
  62. }
  63. /// <summary>
  64. /// 获取mongo线程内唯一对象
  65. /// </summary>
  66. /// <param name="url">连接字符串</param>
  67. /// <param name="database">数据库</param>
  68. /// <returns></returns>
  69. public static MongoDbClient ThreadLocalInstance(string url, string database)
  70. {
  71. var queue = InstanceQueue.GetOrAdd(url + database, new ConcurrentLimitedQueue<MongoDbClient>(32));
  72. if (queue.IsEmpty)
  73. {
  74. Parallel.For(0, queue.Limit, i =>
  75. {
  76. queue.Enqueue(new MongoDbClient(url, database));
  77. });
  78. }
  79. MongoDbClient instance;
  80. if (CallContext.GetData(url + database) == null)
  81. {
  82. queue.TryDequeue(out instance);
  83. CallContext.SetData(url + database, instance);
  84. }
  85. instance = (MongoDbClient)CallContext.GetData(url + database);
  86. return instance;
  87. }
  88. /// <summary>
  89. /// 获取表
  90. /// </summary>
  91. /// <typeparam name="T"></typeparam>
  92. /// <param name="collection">表名</param>
  93. /// <returns></returns>
  94. public IMongoCollection<T> GetCollection<T>(string collection)
  95. {
  96. return Database.GetCollection<T>(collection);
  97. }
  98. #region 插入
  99. /// <summary>
  100. /// 插入一条数据
  101. /// </summary>
  102. /// <typeparam name="T"></typeparam>
  103. /// <param name="collection">表名</param>
  104. /// <param name="t">数据</param>
  105. public void InsertOne<T>(string collection, T t)
  106. {
  107. Database.GetCollection<T>(collection).InsertOne(t);
  108. }
  109. /// <summary>
  110. /// 插入一条数据
  111. /// </summary>
  112. /// <param name="collection">表名</param>
  113. /// <param name="doc">文档</param>
  114. public void InsertOne(string collection, BsonDocument doc)
  115. {
  116. Database.GetCollection<BsonDocument>(collection).InsertOne(doc);
  117. }
  118. /// <summary>
  119. /// 插入一条数据
  120. /// </summary>
  121. /// <typeparam name="T"></typeparam>
  122. /// <param name="collection">表名</param>
  123. /// <param name="t">数据</param>
  124. public void InsertOneAsync<T>(string collection, T t)
  125. {
  126. Database.GetCollection<T>(collection).InsertOneAsync(t);
  127. }
  128. /// <summary>
  129. /// 插入一条数据
  130. /// </summary>
  131. /// <param name="collection">表名</param>
  132. /// <param name="doc">文档</param>
  133. public void InsertOneAsync(string collection, BsonDocument doc)
  134. {
  135. Database.GetCollection<BsonDocument>(collection).InsertOneAsync(doc);
  136. }
  137. /// <summary>
  138. /// 插入多条数据
  139. /// </summary>
  140. /// <typeparam name="T"></typeparam>
  141. /// <param name="collection">表名</param>
  142. /// <param name="list">集合</param>
  143. public void InsertMany<T>(string collection, IEnumerable<T> list)
  144. {
  145. Database.GetCollection<T>(collection).InsertMany(list);
  146. }
  147. /// <summary>
  148. /// 插入多条数据
  149. /// </summary>
  150. /// <param name="collection">表名</param>
  151. /// <param name="list">Bson集合</param>
  152. public void InsertMany(string collection, IEnumerable<BsonDocument> list)
  153. {
  154. Database.GetCollection<BsonDocument>(collection).InsertMany(list);
  155. }
  156. /// <summary>
  157. /// 插入多条数据
  158. /// </summary>
  159. /// <typeparam name="T"></typeparam>
  160. /// <param name="collection">表名</param>
  161. /// <param name="list">集合</param>
  162. public void InsertManyAsync<T>(string collection, IEnumerable<T> list)
  163. {
  164. Database.GetCollection<T>(collection).InsertManyAsync(list);
  165. }
  166. /// <summary>
  167. /// 插入多条数据
  168. /// </summary>
  169. /// <param name="collection">表名</param>
  170. /// <param name="list">Bson集合</param>
  171. public void InsertManyAsync(string collection, IEnumerable<BsonDocument> list)
  172. {
  173. Database.GetCollection<BsonDocument>(collection).InsertManyAsync(list);
  174. }
  175. /// <summary>
  176. /// 大批量插入数据
  177. /// </summary>
  178. /// <typeparam name="T"></typeparam>
  179. /// <param name="collection">表名</param>
  180. /// <param name="list">数据集合</param>
  181. /// <returns></returns>
  182. public List<WriteModel<T>> BulkInsert<T>(string collection, IEnumerable<WriteModel<T>> list)
  183. {
  184. BulkWriteResult<T> result = Database.GetCollection<T>(collection).BulkWrite(list);
  185. return result.ProcessedRequests.ToList();
  186. }
  187. /// <summary>
  188. /// 大批量插入数据
  189. /// </summary>
  190. /// <param name="collection">表名</param>
  191. /// <param name="list">Bson数据集合</param>
  192. /// <returns></returns>
  193. public List<WriteModel<BsonDocument>> BulkInsert(string collection, IEnumerable<WriteModel<BsonDocument>> list)
  194. {
  195. BulkWriteResult<BsonDocument> result = Database.GetCollection<BsonDocument>(collection).BulkWrite(list);
  196. return result.ProcessedRequests.ToList();
  197. }
  198. /// <summary>
  199. /// 大批量插入数据
  200. /// </summary>
  201. /// <typeparam name="T"></typeparam>
  202. /// <param name="collection">表名</param>
  203. /// <param name="list">数据集合</param>
  204. /// <returns></returns>
  205. public async Task<List<WriteModel<T>>> BulkInsertAsync<T>(string collection, IEnumerable<WriteModel<T>> list)
  206. {
  207. BulkWriteResult<T> result = await Database.GetCollection<T>(collection).BulkWriteAsync(list);
  208. return result.ProcessedRequests.ToList();
  209. }
  210. /// <summary>
  211. /// 大批量插入数据
  212. /// </summary>
  213. /// <param name="collection">表名</param>
  214. /// <param name="list">Bson数据集合</param>
  215. /// <returns></returns>
  216. public async Task<List<WriteModel<BsonDocument>>> BulkInsertAsync(string collection, IEnumerable<WriteModel<BsonDocument>> list)
  217. {
  218. BulkWriteResult<BsonDocument> result = await Database.GetCollection<BsonDocument>(collection).BulkWriteAsync(list);
  219. return result.ProcessedRequests.ToList();
  220. }
  221. #endregion
  222. #region 更新
  223. /// <summary>
  224. /// 修改一条数据
  225. /// </summary>
  226. /// <typeparam name="T"></typeparam>
  227. /// <param name="collection">表名</param>
  228. /// <param name="filter">条件</param>
  229. /// <param name="update">更新的数据</param>
  230. /// <param name="upsert">如果它不存在是否插入文档</param>
  231. /// <returns></returns>
  232. public string UpdateOne<T>(string collection, Expression<Func<T, Boolean>> filter, UpdateDefinition<T> update, bool upsert)
  233. {
  234. UpdateResult result = Database.GetCollection<T>(collection).UpdateOne(filter, update, new UpdateOptions() { IsUpsert = upsert });
  235. return result.ToJson();
  236. }
  237. /// <summary>
  238. /// 修改一条数据
  239. /// </summary>
  240. /// <param name="collection">表名</param>
  241. /// <param name="filter">条件</param>
  242. /// <param name="update">更新的数据</param>
  243. /// <param name="upsert">如果它不存在是否插入文档</param>
  244. /// <returns></returns>
  245. public string UpdateOne(string collection, Expression<Func<BsonDocument, Boolean>> filter, UpdateDefinition<BsonDocument> update, bool upsert)
  246. {
  247. UpdateResult result = Database.GetCollection<BsonDocument>(collection).UpdateOne(filter, update, new UpdateOptions() { IsUpsert = upsert });
  248. return result.ToJson();
  249. }
  250. /// <summary>
  251. /// 修改一条数据
  252. /// </summary>
  253. /// <typeparam name="T"></typeparam>
  254. /// <param name="collection">表名</param>
  255. /// <param name="filter">条件</param>
  256. /// <param name="update">更新的数据</param>
  257. /// <param name="upsert">如果它不存在是否插入文档</param>
  258. /// <returns></returns>
  259. public async Task<string> UpdateOneAsync<T>(string collection, Expression<Func<T, Boolean>> filter, UpdateDefinition<T> update, bool upsert)
  260. {
  261. UpdateResult result = await Database.GetCollection<T>(collection).UpdateOneAsync(filter, update, new UpdateOptions() { IsUpsert = upsert });
  262. return result.ToJson();
  263. }
  264. /// <summary>
  265. /// 修改一条数据
  266. /// </summary>
  267. /// <param name="collection">表名</param>
  268. /// <param name="filter">条件</param>
  269. /// <param name="update">更新的数据</param>
  270. /// <param name="upsert">如果它不存在是否插入文档</param>
  271. /// <returns></returns>
  272. public async Task<string> UpdateOneAsync(string collection, Expression<Func<BsonDocument, Boolean>> filter, UpdateDefinition<BsonDocument> update, bool upsert)
  273. {
  274. UpdateResult result = await Database.GetCollection<BsonDocument>(collection).UpdateOneAsync(filter, update, new UpdateOptions() { IsUpsert = upsert });
  275. return result.ToJson();
  276. }
  277. /// <summary>
  278. /// 修改文档
  279. /// </summary>
  280. /// <param name="collName">集合名称</param>
  281. /// <param name="filter">修改条件</param>
  282. /// <param name="update">修改结果</param>
  283. /// <param name="upsert">是否插入新文档(filter条件满足就更新,否则插入新文档)</param>
  284. /// <returns></returns>
  285. public Int64 UpdateMany<T>(String collName, Expression<Func<T, Boolean>> filter, UpdateDefinition<T> update, Boolean upsert = false)
  286. {
  287. UpdateResult result = Database.GetCollection<T>(collName).UpdateMany(filter, update, new UpdateOptions { IsUpsert = upsert });
  288. return result.ModifiedCount;
  289. }
  290. /// <summary>
  291. /// 修改文档
  292. /// </summary>
  293. /// <param name="collName">集合名称</param>
  294. /// <param name="filter">修改条件</param>
  295. /// <param name="update">修改结果</param>
  296. /// <param name="upsert">是否插入新文档(filter条件满足就更新,否则插入新文档)</param>
  297. /// <returns></returns>
  298. public Int64 UpdateMany(String collName, Expression<Func<BsonDocument, Boolean>> filter, UpdateDefinition<BsonDocument> update, Boolean upsert = false)
  299. {
  300. UpdateResult result = Database.GetCollection<BsonDocument>(collName).UpdateMany(filter, update, new UpdateOptions { IsUpsert = upsert });
  301. return result.ModifiedCount;
  302. }
  303. /// <summary>
  304. /// 修改多个文档
  305. /// </summary>
  306. /// <typeparam name="T"></typeparam>
  307. /// <param name="collName">集合名称</param>
  308. /// <param name="filter">修改条件</param>
  309. /// <param name="update">修改结果</param>
  310. /// <param name="upsert">是否插入新文档(filter条件满足就更新,否则插入新文档)</param>
  311. /// <returns></returns>
  312. public async Task<long> UpdateManyAsync<T>(String collName, Expression<Func<T, Boolean>> filter, UpdateDefinition<T> update, Boolean upsert = false)
  313. {
  314. UpdateResult result = await Database.GetCollection<T>(collName).UpdateManyAsync(filter, update, new UpdateOptions { IsUpsert = upsert });
  315. return result.ModifiedCount;
  316. }
  317. /// <summary>
  318. /// 修改多个文档
  319. /// </summary>
  320. /// <param name="collName">集合名称</param>
  321. /// <param name="filter">修改条件</param>
  322. /// <param name="update">修改结果</param>
  323. /// <param name="upsert">是否插入新文档(filter条件满足就更新,否则插入新文档)</param>
  324. /// <returns></returns>
  325. public async Task<long> UpdateManyAsync(String collName, Expression<Func<BsonDocument, Boolean>> filter, UpdateDefinition<BsonDocument> update, Boolean upsert = false)
  326. {
  327. UpdateResult result = await Database.GetCollection<BsonDocument>(collName).UpdateManyAsync(filter, update, new UpdateOptions { IsUpsert = upsert });
  328. return result.ModifiedCount;
  329. }
  330. /// <summary>
  331. /// 修改文档
  332. /// </summary>
  333. /// <typeparam name="T"></typeparam>
  334. /// <param name="collName">表名</param>
  335. /// <param name="filter">条件</param>
  336. /// <param name="update">更新后的数据</param>
  337. /// <returns></returns>
  338. public T UpdateOne<T>(String collName, Expression<Func<T, Boolean>> filter, UpdateDefinition<T> update)
  339. {
  340. T result = Database.GetCollection<T>(collName).FindOneAndUpdate(filter, update);
  341. return result;
  342. }
  343. /// <summary>
  344. /// 修改文档
  345. /// </summary>
  346. /// <param name="collName">表名</param>
  347. /// <param name="filter">条件</param>
  348. /// <param name="update">更新后的Bson数据</param>
  349. /// <returns></returns>
  350. public BsonDocument UpdateOne(String collName, Expression<Func<BsonDocument, Boolean>> filter, UpdateDefinition<BsonDocument> update)
  351. {
  352. BsonDocument result = Database.GetCollection<BsonDocument>(collName).FindOneAndUpdate(filter, update);
  353. return result;
  354. }
  355. /// <summary>
  356. /// 修改文档
  357. /// </summary>
  358. /// <typeparam name="T"></typeparam>
  359. /// <param name="collName">表名</param>
  360. /// <param name="filter">条件</param>
  361. /// <param name="update">更新后的数据</param>
  362. /// <returns></returns>
  363. public async Task<T> UpdateOneAsync<T>(String collName, Expression<Func<T, Boolean>> filter, UpdateDefinition<T> update)
  364. {
  365. T result = await Database.GetCollection<T>(collName).FindOneAndUpdateAsync(filter, update);
  366. return result;
  367. }
  368. /// <summary>
  369. /// 修改文档
  370. /// </summary>
  371. /// <param name="collName">表名</param>
  372. /// <param name="filter">条件</param>
  373. /// <param name="update">更新后的Bson数据</param>
  374. /// <returns></returns>
  375. public async Task<BsonDocument> UpdateOneAsync(String collName, Expression<Func<BsonDocument, Boolean>> filter, UpdateDefinition<BsonDocument> update)
  376. {
  377. BsonDocument result = await Database.GetCollection<BsonDocument>(collName).FindOneAndUpdateAsync(filter, update);
  378. return result;
  379. }
  380. #endregion
  381. #region 删除
  382. /// <summary>
  383. /// 按BsonDocument条件删除
  384. /// </summary>
  385. /// <param name="collection">集合名称</param>
  386. /// <param name="document">文档</param>
  387. /// <returns></returns>
  388. public Int64 Delete<T>(String collection, BsonDocument document)
  389. {
  390. DeleteResult result = Database.GetCollection<T>(collection).DeleteOne(document);
  391. return result.DeletedCount;
  392. }
  393. /// <summary>
  394. /// 按BsonDocument条件删除
  395. /// </summary>
  396. /// <param name="collection">集合名称</param>
  397. /// <param name="document">文档</param>
  398. /// <returns></returns>
  399. public Int64 DeleteMany<T>(String collection, BsonDocument document)
  400. {
  401. DeleteResult result = Database.GetCollection<T>(collection).DeleteMany(document);
  402. return result.DeletedCount;
  403. }
  404. /// <summary>
  405. /// 按BsonDocument条件删除
  406. /// </summary>
  407. /// <param name="collection">集合名称</param>
  408. /// <param name="document">文档</param>
  409. /// <returns></returns>
  410. public Int64 Delete(String collection, BsonDocument document)
  411. {
  412. DeleteResult result = Database.GetCollection<BsonDocument>(collection).DeleteOne(document);
  413. return result.DeletedCount;
  414. }
  415. /// <summary>
  416. /// 按BsonDocument条件删除
  417. /// </summary>
  418. /// <param name="collection">集合名称</param>
  419. /// <param name="document">文档</param>
  420. /// <returns></returns>
  421. public Int64 DeleteMany(String collection, BsonDocument document)
  422. {
  423. DeleteResult result = Database.GetCollection<BsonDocument>(collection).DeleteMany(document);
  424. return result.DeletedCount;
  425. }
  426. /// <summary>
  427. /// 按BsonDocument条件删除
  428. /// </summary>
  429. /// <param name="collection">集合名称</param>
  430. /// <param name="document">文档</param>
  431. /// <returns></returns>
  432. public async Task<long> DeleteAsync<T>(String collection, BsonDocument document)
  433. {
  434. DeleteResult result = await Database.GetCollection<T>(collection).DeleteOneAsync(document);
  435. return result.DeletedCount;
  436. }
  437. /// <summary>
  438. /// 按BsonDocument条件删除
  439. /// </summary>
  440. /// <param name="collection">集合名称</param>
  441. /// <param name="document">文档</param>
  442. /// <returns></returns>
  443. public async Task<long> DeleteManyAsync<T>(String collection, BsonDocument document)
  444. {
  445. DeleteResult result = await Database.GetCollection<T>(collection).DeleteManyAsync(document);
  446. return result.DeletedCount;
  447. }
  448. /// <summary>
  449. /// 按BsonDocument条件删除
  450. /// </summary>
  451. /// <param name="collection">集合名称</param>
  452. /// <param name="document">文档</param>
  453. /// <returns></returns>
  454. public async Task<long> DeleteAsync(String collection, BsonDocument document)
  455. {
  456. DeleteResult result = await Database.GetCollection<BsonDocument>(collection).DeleteOneAsync(document);
  457. return result.DeletedCount;
  458. }
  459. /// <summary>
  460. /// 按BsonDocument条件删除
  461. /// </summary>
  462. /// <param name="collection">集合名称</param>
  463. /// <param name="document">文档</param>
  464. /// <returns></returns>
  465. public async Task<long> DeleteManyAsync(String collection, BsonDocument document)
  466. {
  467. DeleteResult result = await Database.GetCollection<BsonDocument>(collection).DeleteManyAsync(document);
  468. return result.DeletedCount;
  469. }
  470. /// <summary>
  471. /// 按json字符串删除
  472. /// </summary>
  473. /// <param name="collName">集合名称</param>
  474. /// <param name="json">json字符串</param>
  475. /// <returns></returns>
  476. public Int64 Delete<T>(String collName, String json)
  477. {
  478. var result = Database.GetCollection<T>(collName).DeleteOne(json);
  479. return result.DeletedCount;
  480. }
  481. /// <summary>
  482. /// 按json字符串删除
  483. /// </summary>
  484. /// <param name="collName">集合名称</param>
  485. /// <param name="json">json字符串</param>
  486. /// <returns></returns>
  487. public Int64 DeleteMany<T>(String collName, String json)
  488. {
  489. var result = Database.GetCollection<T>(collName).DeleteMany(json);
  490. return result.DeletedCount;
  491. }
  492. /// <summary>
  493. /// 按json字符串删除
  494. /// </summary>
  495. /// <param name="collName">集合名称</param>
  496. /// <param name="json">json字符串</param>
  497. /// <returns></returns>
  498. public Int64 Delete(String collName, String json)
  499. {
  500. var result = Database.GetCollection<BsonDocument>(collName).DeleteOne(json);
  501. return result.DeletedCount;
  502. }
  503. /// <summary>
  504. /// 按json字符串删除
  505. /// </summary>
  506. /// <param name="collName">集合名称</param>
  507. /// <param name="json">json字符串</param>
  508. /// <returns></returns>
  509. public Int64 DeleteMany(String collName, String json)
  510. {
  511. var result = Database.GetCollection<BsonDocument>(collName).DeleteMany(json);
  512. return result.DeletedCount;
  513. }
  514. /// <summary>
  515. /// 按json字符串删除
  516. /// </summary>
  517. /// <param name="collName">集合名称</param>
  518. /// <param name="json">json字符串</param>
  519. /// <returns></returns>
  520. public async Task<long> DeleteAsync<T>(String collName, String json)
  521. {
  522. var result = await Database.GetCollection<T>(collName).DeleteOneAsync(json);
  523. return result.DeletedCount;
  524. }
  525. /// <summary>
  526. /// 按json字符串删除
  527. /// </summary>
  528. /// <param name="collName">集合名称</param>
  529. /// <param name="json">json字符串</param>
  530. /// <returns></returns>
  531. public async Task<long> DeleteManyAsync<T>(String collName, String json)
  532. {
  533. var result = await Database.GetCollection<T>(collName).DeleteManyAsync(json);
  534. return result.DeletedCount;
  535. }
  536. /// <summary>
  537. /// 按json字符串删除
  538. /// </summary>
  539. /// <param name="collName">集合名称</param>
  540. /// <param name="json">json字符串</param>
  541. /// <returns></returns>
  542. public async Task<long> DeleteAsync(String collName, String json)
  543. {
  544. var result = await Database.GetCollection<BsonDocument>(collName).DeleteOneAsync(json);
  545. return result.DeletedCount;
  546. }
  547. /// <summary>
  548. /// 按json字符串删除
  549. /// </summary>
  550. /// <param name="collName">集合名称</param>
  551. /// <param name="json">json字符串</param>
  552. /// <returns></returns>
  553. public async Task<long> DeleteManyAsync(String collName, String json)
  554. {
  555. var result = await Database.GetCollection<BsonDocument>(collName).DeleteManyAsync(json);
  556. return result.DeletedCount;
  557. }
  558. /// <summary>
  559. /// 按条件表达式删除
  560. /// </summary>
  561. /// <param name="collName">集合名称</param>
  562. /// <param name="predicate">条件表达式</param>
  563. /// <returns></returns>
  564. public Int64 Delete<T>(String collName, Expression<Func<T, Boolean>> predicate)
  565. {
  566. var result = Database.GetCollection<T>(collName).DeleteOne(predicate);
  567. return result.DeletedCount;
  568. }
  569. /// <summary>
  570. /// 按条件表达式删除
  571. /// </summary>
  572. /// <param name="collName">集合名称</param>
  573. /// <param name="predicate">条件表达式</param>
  574. /// <returns></returns>
  575. public Int64 DeleteMany<T>(String collName, Expression<Func<T, Boolean>> predicate)
  576. {
  577. var result = Database.GetCollection<T>(collName).DeleteMany(predicate);
  578. return result.DeletedCount;
  579. }
  580. /// <summary>
  581. /// 按条件表达式删除
  582. /// </summary>
  583. /// <param name="collName">集合名称</param>
  584. /// <param name="predicate">条件表达式</param>
  585. /// <returns></returns>
  586. public Int64 Delete(String collName, Expression<Func<BsonDocument, Boolean>> predicate)
  587. {
  588. var result = Database.GetCollection<BsonDocument>(collName).DeleteOne(predicate);
  589. return result.DeletedCount;
  590. }
  591. /// <summary>
  592. /// 按条件表达式删除
  593. /// </summary>
  594. /// <param name="collName">集合名称</param>
  595. /// <param name="predicate">条件表达式</param>
  596. /// <returns></returns>
  597. public Int64 DeleteMany(String collName, Expression<Func<BsonDocument, Boolean>> predicate)
  598. {
  599. var result = Database.GetCollection<BsonDocument>(collName).DeleteMany(predicate);
  600. return result.DeletedCount;
  601. }
  602. /// <summary>
  603. /// 按条件表达式删除
  604. /// </summary>
  605. /// <param name="collName">集合名称</param>
  606. /// <param name="predicate">条件表达式</param>
  607. /// <returns></returns>
  608. public async Task<long> DeleteAsync<T>(String collName, Expression<Func<T, Boolean>> predicate)
  609. {
  610. var result = await Database.GetCollection<T>(collName).DeleteOneAsync(predicate);
  611. return result.DeletedCount;
  612. }
  613. /// <summary>
  614. /// 按条件表达式删除
  615. /// </summary>
  616. /// <param name="collName">集合名称</param>
  617. /// <param name="predicate">条件表达式</param>
  618. /// <returns></returns>
  619. public async Task<long> DeleteManyAsync<T>(String collName, Expression<Func<T, Boolean>> predicate)
  620. {
  621. var result = await Database.GetCollection<T>(collName).DeleteManyAsync(predicate);
  622. return result.DeletedCount;
  623. }
  624. /// <summary>
  625. /// 按条件表达式删除
  626. /// </summary>
  627. /// <param name="collName">集合名称</param>
  628. /// <param name="predicate">条件表达式</param>
  629. /// <returns></returns>
  630. public async Task<long> DeleteAsync(String collName, Expression<Func<BsonDocument, Boolean>> predicate)
  631. {
  632. var result = await Database.GetCollection<BsonDocument>(collName).DeleteOneAsync(predicate);
  633. return result.DeletedCount;
  634. }
  635. /// <summary>
  636. /// 按条件表达式删除
  637. /// </summary>
  638. /// <param name="collName">集合名称</param>
  639. /// <param name="predicate">条件表达式</param>
  640. /// <returns></returns>
  641. public async Task<long> DeleteManyAsync(String collName, Expression<Func<BsonDocument, Boolean>> predicate)
  642. {
  643. var result = await Database.GetCollection<BsonDocument>(collName).DeleteManyAsync(predicate);
  644. return result.DeletedCount;
  645. }
  646. /// <summary>
  647. /// 按检索条件删除
  648. /// 建议用Builders&lt;T&gt;构建复杂的查询条件
  649. /// </summary>
  650. /// <param name="collName">集合名称</param>
  651. /// <param name="filter">条件</param>
  652. /// <returns></returns>
  653. public Int64 Delete<T>(String collName, FilterDefinition<T> filter)
  654. {
  655. var result = Database.GetCollection<T>(collName).DeleteOne(filter);
  656. return result.DeletedCount;
  657. }
  658. /// <summary>
  659. /// 按检索条件删除
  660. /// 建议用Builders&lt;T&gt;构建复杂的查询条件
  661. /// </summary>
  662. /// <param name="collName">集合名称</param>
  663. /// <param name="filter">条件</param>
  664. /// <returns></returns>
  665. public Int64 DeleteMany<T>(String collName, FilterDefinition<T> filter)
  666. {
  667. var result = Database.GetCollection<T>(collName).DeleteMany(filter);
  668. return result.DeletedCount;
  669. }
  670. /// <summary>
  671. /// 按检索条件删除
  672. /// 建议用Builders&lt;T&gt;构建复杂的查询条件
  673. /// </summary>
  674. /// <param name="collName">集合名称</param>
  675. /// <param name="filter">条件</param>
  676. /// <returns></returns>
  677. public Int64 Delete(String collName, FilterDefinition<BsonDocument> filter)
  678. {
  679. var result = Database.GetCollection<BsonDocument>(collName).DeleteOne(filter);
  680. return result.DeletedCount;
  681. }
  682. /// <summary>
  683. /// 按检索条件删除
  684. /// 建议用Builders&lt;T&gt;构建复杂的查询条件
  685. /// </summary>
  686. /// <param name="collName">集合名称</param>
  687. /// <param name="filter">条件</param>
  688. /// <returns></returns>
  689. public Int64 DeleteMany(String collName, FilterDefinition<BsonDocument> filter)
  690. {
  691. var result = Database.GetCollection<BsonDocument>(collName).DeleteMany(filter);
  692. return result.DeletedCount;
  693. }
  694. /// <summary>
  695. /// 按检索条件删除
  696. /// 建议用Builders&lt;T&gt;构建复杂的查询条件
  697. /// </summary>
  698. /// <param name="collName">集合名称</param>
  699. /// <param name="filter">条件</param>
  700. /// <returns></returns>
  701. public async Task<long> DeleteAsync<T>(String collName, FilterDefinition<T> filter)
  702. {
  703. var result = await Database.GetCollection<T>(collName).DeleteOneAsync(filter);
  704. return result.DeletedCount;
  705. }
  706. /// <summary>
  707. /// 按检索条件删除
  708. /// 建议用Builders&lt;T&gt;构建复杂的查询条件
  709. /// </summary>
  710. /// <param name="collName">集合名称</param>
  711. /// <param name="filter">条件</param>
  712. /// <returns></returns>
  713. public async Task<long> DeleteManyAsync<T>(String collName, FilterDefinition<T> filter)
  714. {
  715. var result = await Database.GetCollection<T>(collName).DeleteManyAsync(filter);
  716. return result.DeletedCount;
  717. }
  718. /// <summary>
  719. /// 按检索条件删除
  720. /// 建议用Builders&lt;T&gt;构建复杂的查询条件
  721. /// </summary>
  722. /// <param name="collName">集合名称</param>
  723. /// <param name="filter">条件</param>
  724. /// <returns></returns>
  725. public async Task<long> DeleteAsync(String collName, FilterDefinition<BsonDocument> filter)
  726. {
  727. var result = await Database.GetCollection<BsonDocument>(collName).DeleteOneAsync(filter);
  728. return result.DeletedCount;
  729. }
  730. /// <summary>
  731. /// 按检索条件删除
  732. /// 建议用Builders&lt;T&gt;构建复杂的查询条件
  733. /// </summary>
  734. /// <param name="collName">集合名称</param>
  735. /// <param name="filter">条件</param>
  736. /// <returns></returns>
  737. public async Task<long> DeleteManyAsync(String collName, FilterDefinition<BsonDocument> filter)
  738. {
  739. var result = await Database.GetCollection<BsonDocument>(collName).DeleteManyAsync(filter);
  740. return result.DeletedCount;
  741. }
  742. /// <summary>
  743. /// 删除一条记录
  744. /// </summary>
  745. /// <typeparam name="T"></typeparam>
  746. /// <param name="collName">表名</param>
  747. /// <param name="filter">条件</param>
  748. /// <returns></returns>
  749. public T DeleteOne<T>(String collName, Expression<Func<T, Boolean>> filter)
  750. {
  751. T result = Database.GetCollection<T>(collName).FindOneAndDelete(filter);
  752. return result;
  753. }
  754. /// <summary>
  755. /// 删除一条记录
  756. /// </summary>
  757. /// <param name="collName">表名</param>
  758. /// <param name="filter">条件</param>
  759. /// <returns></returns>
  760. public BsonDocument DeleteOne(String collName, Expression<Func<BsonDocument, Boolean>> filter)
  761. {
  762. BsonDocument result = Database.GetCollection<BsonDocument>(collName).FindOneAndDelete(filter);
  763. return result;
  764. }
  765. /// <summary>
  766. /// 删除一条记录
  767. /// </summary>
  768. /// <typeparam name="T"></typeparam>
  769. /// <param name="collName">表名</param>
  770. /// <param name="filter">条件</param>
  771. /// <returns></returns>
  772. public async Task<T> DeleteOneAsync<T>(String collName, Expression<Func<T, Boolean>> filter)
  773. {
  774. T result = await Database.GetCollection<T>(collName).FindOneAndDeleteAsync(filter);
  775. return result;
  776. }
  777. /// <summary>
  778. /// 删除一条记录
  779. /// </summary>
  780. /// <param name="collName">表名</param>
  781. /// <param name="filter">条件</param>
  782. /// <returns></returns>
  783. public async Task<BsonDocument> DeleteOneAsync(String collName, Expression<Func<BsonDocument, Boolean>> filter)
  784. {
  785. BsonDocument result = await Database.GetCollection<BsonDocument>(collName).FindOneAndDeleteAsync(filter);
  786. return result;
  787. }
  788. #endregion
  789. #region 查询
  790. /// <summary>
  791. /// 查询,复杂查询直接用Linq处理
  792. /// </summary>
  793. /// <param name="collName">集合名称</param>
  794. /// <returns>要查询的对象</returns>
  795. public IQueryable<T> GetQueryable<T>(String collName)
  796. {
  797. return Database.GetCollection<T>(collName).AsQueryable();
  798. }
  799. /// <summary>
  800. /// 查询,复杂查询直接用Linq处理
  801. /// </summary>
  802. /// <param name="collName">集合名称</param>
  803. /// <returns>要查询的对象</returns>
  804. public IQueryable<BsonDocument> GetQueryable(String collName)
  805. {
  806. return Database.GetCollection<BsonDocument>(collName).AsQueryable();
  807. }
  808. /// <summary>
  809. /// 获取一条数据
  810. /// </summary>
  811. /// <typeparam name="T"></typeparam>
  812. /// <param name="collName">表名</param>
  813. /// <param name="filter">条件</param>
  814. /// <returns></returns>
  815. public T Get<T>(String collName, FilterDefinition<T> filter)
  816. {
  817. IFindFluent<T, T> find = Database.GetCollection<T>(collName).Find(filter);
  818. return find.FirstOrDefault();
  819. }
  820. /// <summary>
  821. /// 获取一条数据
  822. /// </summary>
  823. /// <param name="collName">表名</param>
  824. /// <param name="filter">条件</param>
  825. /// <returns></returns>
  826. public BsonDocument Get(String collName, FilterDefinition<BsonDocument> filter)
  827. {
  828. IFindFluent<BsonDocument, BsonDocument> find = Database.GetCollection<BsonDocument>(collName).Find(filter);
  829. return find.FirstOrDefault();
  830. }
  831. /// <summary>
  832. /// 获取一条数据
  833. /// </summary>
  834. /// <typeparam name="T"></typeparam>
  835. /// <param name="collName">表名</param>
  836. /// <param name="filter">条件</param>
  837. /// <returns></returns>
  838. public async Task<T> GetAsync<T>(String collName, FilterDefinition<T> filter)
  839. {
  840. IAsyncCursor<T> find = await Database.GetCollection<T>(collName).FindAsync(filter);
  841. return await find.FirstOrDefaultAsync();
  842. }
  843. /// <summary>
  844. /// 获取一条数据
  845. /// </summary>
  846. /// <param name="collName">表名</param>
  847. /// <param name="filter">条件</param>
  848. /// <returns></returns>
  849. public async Task<BsonDocument> GetAsync(String collName, FilterDefinition<BsonDocument> filter)
  850. {
  851. IAsyncCursor<BsonDocument> find = await Database.GetCollection<BsonDocument>(collName).FindAsync(filter);
  852. return await find.FirstOrDefaultAsync();
  853. }
  854. /// <summary>
  855. /// 获取多条数据
  856. /// </summary>
  857. /// <typeparam name="T"></typeparam>
  858. /// <param name="collName">表名</param>
  859. /// <param name="filter">条件</param>
  860. /// <returns></returns>
  861. public IEnumerable<T> GetMany<T>(String collName, FilterDefinition<T> filter)
  862. {
  863. IFindFluent<T, T> find = Database.GetCollection<T>(collName).Find(filter);
  864. return find.ToEnumerable();
  865. }
  866. /// <summary>
  867. /// 获取多条数据
  868. /// </summary>
  869. /// <param name="collName">表名</param>
  870. /// <param name="filter">条件</param>
  871. /// <returns></returns>
  872. public IEnumerable<BsonDocument> GetMany(String collName, FilterDefinition<BsonDocument> filter)
  873. {
  874. IFindFluent<BsonDocument, BsonDocument> find = Database.GetCollection<BsonDocument>(collName).Find(filter);
  875. return find.ToEnumerable();
  876. }
  877. /// <summary>
  878. /// 获取多条数据
  879. /// </summary>
  880. /// <typeparam name="T"></typeparam>
  881. /// <param name="collName">表名</param>
  882. /// <param name="filter">条件</param>
  883. /// <returns></returns>
  884. public async Task<IEnumerable<T>> GetManyAsync<T>(String collName, FilterDefinition<T> filter)
  885. {
  886. IAsyncCursor<T> find = await Database.GetCollection<T>(collName).FindAsync(filter);
  887. return find.ToEnumerable();
  888. }
  889. /// <summary>
  890. /// 获取多条数据
  891. /// </summary>
  892. /// <param name="collName">表名</param>
  893. /// <param name="filter">条件</param>
  894. /// <returns></returns>
  895. public async Task<IEnumerable<BsonDocument>> GetManyAsync(String collName, FilterDefinition<BsonDocument> filter)
  896. {
  897. IAsyncCursor<BsonDocument> find = await Database.GetCollection<BsonDocument>(collName).FindAsync(filter);
  898. return find.ToEnumerable();
  899. }
  900. /// <summary>
  901. /// 判断是否存在符合条件的数据
  902. /// </summary>
  903. /// <typeparam name="T"></typeparam>
  904. /// <param name="collName">表名</param>
  905. /// <param name="filter">条件</param>
  906. /// <returns></returns>
  907. public bool Any<T>(String collName, FilterDefinition<T> filter)
  908. {
  909. IFindFluent<T, T> find = Database.GetCollection<T>(collName).Find(filter);
  910. return find.Any();
  911. }
  912. /// <summary>
  913. /// 判断是否存在符合条件的数据
  914. /// </summary>
  915. /// <param name="collName">表名</param>
  916. /// <param name="filter">条件</param>
  917. /// <returns></returns>
  918. public bool Any(String collName, FilterDefinition<BsonDocument> filter)
  919. {
  920. IFindFluent<BsonDocument, BsonDocument> find = Database.GetCollection<BsonDocument>(collName).Find(filter);
  921. return find.Any();
  922. }
  923. /// <summary>
  924. /// 判断是否存在符合条件的数据
  925. /// </summary>
  926. /// <param name="collName">表名</param>
  927. /// <param name="filter">条件</param>
  928. /// <returns></returns>
  929. public async Task<bool> AnyAsync<T>(String collName, FilterDefinition<T> filter)
  930. {
  931. IAsyncCursor<T> find = await Database.GetCollection<T>(collName).FindAsync(filter);
  932. return await find.AnyAsync();
  933. }
  934. /// <summary>
  935. /// 判断是否存在符合条件的数据
  936. /// </summary>
  937. /// <param name="collName">表名</param>
  938. /// <param name="filter">条件</param>
  939. /// <returns></returns>
  940. public async Task<bool> AnyAsync(String collName, FilterDefinition<BsonDocument> filter)
  941. {
  942. IAsyncCursor<BsonDocument> find = await Database.GetCollection<BsonDocument>(collName).FindAsync(filter);
  943. return await find.AnyAsync();
  944. }
  945. #endregion
  946. #region 索引
  947. /// <summary>
  948. /// 创建索引
  949. /// </summary>
  950. /// <param name="collection">集合名</param>
  951. /// <param name="index">索引键</param>
  952. /// <param name="asc"></param>
  953. /// <returns></returns>
  954. public string CreateIndex(string collection, string index, bool asc = true)
  955. {
  956. IMongoIndexManager<BsonDocument> mgr = Database.GetCollection<BsonDocument>(collection).Indexes;
  957. var list = mgr.List();
  958. while (list.MoveNext())
  959. {
  960. if (!list.Current.Any(doc => doc["name"].AsString.StartsWith(index)))
  961. {
  962. return mgr.CreateOne(asc ? Builders<BsonDocument>.IndexKeys.Ascending(doc => doc[index]) : Builders<BsonDocument>.IndexKeys.Descending(doc => doc[index]));
  963. }
  964. }
  965. return string.Empty;
  966. }
  967. /// <summary>
  968. /// 创建索引
  969. /// </summary>
  970. /// <param name="collection">集合名</param>
  971. /// <param name="index">索引键</param>
  972. /// <param name="asc"></param>
  973. /// <returns></returns>
  974. public async Task<string> CreateIndexAsync(string collection, string index, bool asc = true)
  975. {
  976. IMongoIndexManager<BsonDocument> mgr = Database.GetCollection<BsonDocument>(collection).Indexes;
  977. var list = mgr.List();
  978. while (list.MoveNext())
  979. {
  980. if (!list.Current.Any(doc => doc["name"].AsString.StartsWith(index)))
  981. {
  982. return await mgr.CreateOneAsync(asc ? Builders<BsonDocument>.IndexKeys.Ascending(doc => doc[index]) : Builders<BsonDocument>.IndexKeys.Descending(doc => doc[index]));
  983. }
  984. }
  985. return string.Empty;
  986. }
  987. /// <summary>
  988. /// 更新索引
  989. /// </summary>
  990. /// <param name="collection">集合名</param>
  991. /// <param name="index">索引键</param>
  992. /// <param name="asc"></param>
  993. /// <returns></returns>
  994. public string UpdateIndex(string collection, string index, bool asc = true)
  995. {
  996. IMongoIndexManager<BsonDocument> mgr = Database.GetCollection<BsonDocument>(collection).Indexes;
  997. return mgr.CreateOne(asc ? Builders<BsonDocument>.IndexKeys.Ascending(doc => doc[index]) : Builders<BsonDocument>.IndexKeys.Descending(doc => doc[index]));
  998. }
  999. /// <summary>
  1000. /// 更新索引
  1001. /// </summary>
  1002. /// <param name="collection">集合名</param>
  1003. /// <param name="index">索引键</param>
  1004. /// <param name="asc"></param>
  1005. /// <returns></returns>
  1006. public async Task<string> UpdateIndexAsync(string collection, string index, bool asc = true)
  1007. {
  1008. IMongoIndexManager<BsonDocument> mgr = Database.GetCollection<BsonDocument>(collection).Indexes;
  1009. return await mgr.CreateOneAsync(asc ? Builders<BsonDocument>.IndexKeys.Ascending(doc => doc[index]) : Builders<BsonDocument>.IndexKeys.Descending(doc => doc[index]));
  1010. }
  1011. /// <summary>
  1012. /// 删除索引
  1013. /// </summary>
  1014. /// <param name="collection">集合名</param>
  1015. /// <param name="index">索引键</param>
  1016. /// <returns></returns>
  1017. public void DropIndex(string collection, string index)
  1018. {
  1019. Database.GetCollection<BsonDocument>(collection).Indexes.DropOne(index);
  1020. }
  1021. /// <summary>
  1022. /// 删除索引
  1023. /// </summary>
  1024. /// <param name="collection">集合名</param>
  1025. /// <param name="index">索引键</param>
  1026. /// <returns></returns>
  1027. public void DropIndexAsync(string collection, string index)
  1028. {
  1029. Database.GetCollection<BsonDocument>(collection).Indexes.DropOneAsync(index);
  1030. }
  1031. /// <summary>
  1032. /// 创建索引
  1033. /// </summary>
  1034. /// <param name="collection">集合名</param>
  1035. /// <param name="index">索引键</param>
  1036. /// <param name="key"></param>
  1037. /// <param name="asc"></param>
  1038. /// <returns></returns>
  1039. public string CreateIndex<T>(string collection, string index, Expression<Func<T, object>> key, bool asc = true)
  1040. {
  1041. IMongoIndexManager<T> mgr = Database.GetCollection<T>(collection).Indexes;
  1042. var list = mgr.List();
  1043. while (list.MoveNext())
  1044. {
  1045. if (!list.Current.Any(doc => doc["name"].AsString.StartsWith(index)))
  1046. {
  1047. return mgr.CreateOne(asc ? Builders<T>.IndexKeys.Ascending(key) : Builders<T>.IndexKeys.Descending(key));
  1048. }
  1049. }
  1050. return String.Empty;
  1051. }
  1052. /// <summary>
  1053. /// 创建索引
  1054. /// </summary>
  1055. /// <param name="collection">集合名</param>
  1056. /// <param name="index">索引键</param>
  1057. /// <param name="key"></param>
  1058. /// <param name="asc"></param>
  1059. /// <returns></returns>
  1060. public async Task<string> CreateIndexAsync<T>(string collection, string index, Expression<Func<T, object>> key, bool asc = true)
  1061. {
  1062. IMongoIndexManager<T> mgr = Database.GetCollection<T>(collection).Indexes;
  1063. var list = mgr.List();
  1064. while (list.MoveNext())
  1065. {
  1066. if (!list.Current.Any(doc => doc["name"].AsString.StartsWith(index)))
  1067. {
  1068. return await mgr.CreateOneAsync(asc ? Builders<T>.IndexKeys.Ascending(key) : Builders<T>.IndexKeys.Descending(key));
  1069. }
  1070. }
  1071. return String.Empty;
  1072. }
  1073. /// <summary>
  1074. /// 更新索引
  1075. /// </summary>
  1076. /// <param name="collection">集合名</param>
  1077. /// <param name="key"></param>
  1078. /// <param name="asc"></param>
  1079. /// <returns></returns>
  1080. public string UpdateIndex<T>(string collection, Expression<Func<T, object>> key, bool asc = true)
  1081. {
  1082. IMongoIndexManager<T> mgr = Database.GetCollection<T>(collection).Indexes;
  1083. return mgr.CreateOne(asc ? Builders<T>.IndexKeys.Ascending(key) : Builders<T>.IndexKeys.Descending(key));
  1084. }
  1085. /// <summary>
  1086. /// 更新索引
  1087. /// </summary>
  1088. /// <param name="collection">集合名</param>
  1089. /// <param name="key"></param>
  1090. /// <param name="asc"></param>
  1091. /// <returns></returns>
  1092. public async Task<string> UpdateIndexAsync<T>(string collection, Expression<Func<T, object>> key, bool asc = true)
  1093. {
  1094. IMongoIndexManager<T> mgr = Database.GetCollection<T>(collection).Indexes;
  1095. return await mgr.CreateOneAsync(asc ? Builders<T>.IndexKeys.Ascending(key) : Builders<T>.IndexKeys.Descending(key));
  1096. }
  1097. #endregion
  1098. }
  1099. }