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();
}
}
}