1
1

MongoDbClient.cs 47 KB

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