using Business.Core.Attributes; using Microsoft.Extensions.Options; using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Entities; namespace Business.Core.MongoDBHelper { /// /// MongoDB帮助类 /// public class MongoDBTools : IMongoDB where T : Entity { public readonly IMongoCollection mongoCollection; public IOptionsSnapshot _config; /// /// MongoDB链接 /// /// /// public MongoDBTools(IOptionsSnapshot config) { _config = config; //数据库链接 MongoClient client = new MongoClient(config.Value.connectstring); CollectionNameAttribute collectonName = typeof(T).GetCustomAttributes(typeof(CollectionNameAttribute), true).FirstOrDefault() as CollectionNameAttribute; if (collectonName == null) { throw new NotImplementedException("请配置Attribute属性!"); } //数据库 var database = client.GetDatabase(collectonName.DatabaseName); //表名 mongoCollection = database.GetCollection(collectonName.CollectionName); } /// /// 插入一条数据 /// /// /// public Task InsertOne(T document) { return mongoCollection.InsertOneAsync(document); } /// /// 插入多条数据 /// /// /// /// public Task InsertMany(List documents) { return mongoCollection.InsertManyAsync(documents,new InsertManyOptions() { IsOrdered = false}); } /// /// 更新一条数据 /// /// /// /// public Task UpdateOne(T documents,long id) { return mongoCollection.ReplaceOneAsync(Builders.Filter.Eq(p=>p.Id, id), documents); } /// /// 获取所有数据 /// /// /// public Task> GetAll() { return mongoCollection.AsQueryable().ToListAsync(); } /// /// 跟据Id获取数据 /// /// /// /// public Task GetOneByID(long id) { return mongoCollection.Find(p => p.Id == id).FirstOrDefaultAsync(); } /// /// 根据条件获取数据 /// /// public Task> GetManyByCondition(Expression> filter) { return mongoCollection.Find(filter).ToListAsync(); } /// /// 根据条件获取数据 /// /// public Task> GetManyByIds(FilterDefinition filter) { return mongoCollection.Find(filter).ToListAsync(); } } }