MongoDBTools.cs 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. using Business.Core.Attributes;
  2. using Microsoft.Extensions.Options;
  3. using MongoDB.Bson;
  4. using MongoDB.Driver;
  5. using MongoDB.Driver.Linq;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Linq.Expressions;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using Volo.Abp.Domain.Entities;
  13. namespace Business.Core.MongoDBHelper
  14. {
  15. /// <summary>
  16. /// MongoDB帮助类
  17. /// </summary>
  18. public class MongoDBTools<T> : IMongoDB<T> where T : Entity<long>
  19. {
  20. public readonly IMongoCollection<T> mongoCollection;
  21. public readonly IMongoDatabase dataBase;
  22. public IOptionsSnapshot<Config> _config;
  23. public CollectionNameAttribute collectonName;
  24. /// <summary>
  25. /// MongoDB链接
  26. /// </summary>
  27. /// <param name="config"></param>
  28. /// <exception cref="NotImplementedException"></exception>
  29. public MongoDBTools(IOptionsSnapshot<Config> config)
  30. {
  31. _config = config;
  32. //数据库链接
  33. MongoClient client = new MongoClient(config.Value.connectstring);
  34. collectonName = typeof(T).GetCustomAttributes(typeof(CollectionNameAttribute), true).FirstOrDefault() as CollectionNameAttribute;
  35. if (collectonName == null)
  36. {
  37. throw new NotImplementedException("请配置Attribute属性!");
  38. }
  39. //数据库
  40. dataBase = client.GetDatabase(collectonName.DatabaseName);
  41. //表名
  42. mongoCollection = dataBase.GetCollection<T>(collectonName.CollectionName);
  43. }
  44. /// <summary>
  45. /// 插入一条数据
  46. /// </summary>
  47. /// <param name="document"></param>
  48. /// <returns></returns>
  49. public Task InsertOne(T document)
  50. {
  51. return mongoCollection.InsertOneAsync(document);
  52. }
  53. /// <summary>
  54. /// 插入多条数据
  55. /// </summary>
  56. /// <param name="documents"></param>
  57. /// <returns></returns>
  58. /// <exception cref="NotImplementedException"></exception>
  59. public Task InsertMany(List<T> documents)
  60. {
  61. return mongoCollection.InsertManyAsync(documents,new InsertManyOptions() { IsOrdered = false});
  62. }
  63. /// <summary>
  64. /// 更新一条数据
  65. /// </summary>
  66. /// <param name="documents"></param>
  67. /// <param name="id"></param>
  68. /// <returns></returns>
  69. public Task<ReplaceOneResult> UpdateOne(T documents,long id)
  70. {
  71. return mongoCollection.ReplaceOneAsync(Builders<T>.Filter.Eq(p=>p.Id, id), documents);
  72. }
  73. /// <summary>
  74. /// 获取所有数据
  75. /// </summary>
  76. /// <returns></returns>
  77. /// <exception cref="NotImplementedException"></exception>
  78. public Task<List<T>> GetAll()
  79. {
  80. return mongoCollection.AsQueryable<T>().ToListAsync();
  81. }
  82. /// <summary>
  83. /// 跟据Id获取数据
  84. /// </summary>
  85. /// <param name="id"></param>
  86. /// <returns></returns>
  87. /// <exception cref="NotImplementedException"></exception>
  88. public Task<T> GetOneByID(long id)
  89. {
  90. return mongoCollection.Find(p => p.Id == id).FirstOrDefaultAsync();
  91. }
  92. /// <summary>
  93. /// 根据条件获取数据
  94. /// </summary>
  95. /// <returns></returns>
  96. public Task<List<T>> GetManyByCondition(Expression<Func<T, bool>> filter)
  97. {
  98. return mongoCollection.Find(filter).ToListAsync();
  99. }
  100. /// <summary>
  101. /// 根据条件获取数据
  102. /// </summary>
  103. /// <returns></returns>
  104. public Task<List<T>> GetManyByIds(FilterDefinition<T> filter)
  105. {
  106. return mongoCollection.Find(filter).ToListAsync();
  107. }
  108. /// <summary>
  109. /// 根据id删除对象
  110. /// </summary>
  111. /// <param name="id"></param>
  112. public Task DeleteById(long id)
  113. {
  114. return mongoCollection.DeleteManyAsync(s => id==s.Id);
  115. }
  116. /// <summary>
  117. /// 根据id列表批量删除对象
  118. /// </summary>
  119. /// <param name="ids">id列表</param>
  120. public Task DeleteByIds(IEnumerable<long> ids)
  121. {
  122. return mongoCollection.DeleteManyAsync(s => ids.Contains(s.Id));
  123. }
  124. /// <summary>
  125. /// 删除数据
  126. /// </summary>
  127. /// <param name="expression"></param>
  128. /// <param name="isOne"></param>
  129. /// <returns></returns>
  130. public Task<DeleteResult> Delete(Expression<Func<T, bool>> expression, bool isOne = false)
  131. {
  132. if (isOne)
  133. return mongoCollection.DeleteOneAsync(expression);
  134. else
  135. return mongoCollection.DeleteManyAsync(expression);
  136. }
  137. /// <summary>
  138. /// 删除数据
  139. /// </summary>
  140. /// <param name="filter"></param>
  141. /// <param name="isOne"></param>
  142. /// <returns></returns>
  143. public Task<DeleteResult> Delete(FilterDefinition<T> filter, bool isOne = false)
  144. {
  145. if (isOne)
  146. return mongoCollection.DeleteOneAsync(filter);
  147. else
  148. return mongoCollection.DeleteManyAsync(filter);
  149. }
  150. /// <summary>
  151. /// 删除数据-直接删除集合,慎用,慎用,慎用
  152. /// </summary>
  153. /// <returns></returns>
  154. public Task DeleteAll()
  155. {
  156. return dataBase.DropCollectionAsync(collectonName.CollectionName);
  157. }
  158. }
  159. }