MongoDbClient.cs 47 KB

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