using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Threading.Tasks;
using MongoDB.Bson;
using MongoDB.Driver;
namespace Masuit.Tools.NoSQL.MongoDBClient
{
public class MongoDbClient
{
public MongoClient Client { get; set; }
public IMongoDatabase Database { get; set; }
private static readonly object LockObj = new object();
private static MongoDbClient Instance { get; set; }
private MongoDbClient(string url, string database)
{
Client = new MongoClient(url);
Database = Client.GetDatabase(database);
}
///
/// 获取mongo单例
///
/// 连接字符串
/// 数据库
///
public static MongoDbClient GetInstance(string url, string database)
{
if (Instance == null)
{
lock (LockObj)
{
if (Instance == null)
{
Instance = new MongoDbClient(url, database);
}
}
}
return Instance;
}
///
/// 获取表
///
///
/// 表名
///
public IMongoCollection GetCollection(string collection)
{
return Database.GetCollection(collection);
}
#region 插入
///
/// 插入一条数据
///
///
/// 表名
/// 数据
public void InsertOne(string collection, T t)
{
Database.GetCollection(collection).InsertOne(t);
}
///
/// 插入一条数据
///
/// 表名
/// 文档
public void InsertOne(string collection, BsonDocument doc)
{
Database.GetCollection(collection).InsertOne(doc);
}
///
/// 插入一条数据
///
///
/// 表名
/// 数据
public void InsertOneAsync(string collection, T t)
{
Database.GetCollection(collection).InsertOneAsync(t);
}
///
/// 插入一条数据
///
/// 表名
/// 文档
public void InsertOneAsync(string collection, BsonDocument doc)
{
Database.GetCollection(collection).InsertOneAsync(doc);
}
///
/// 插入多条数据
///
///
/// 表名
/// 集合
public void InsertMany(string collection, IEnumerable list)
{
Database.GetCollection(collection).InsertMany(list);
}
///
/// 插入多条数据
///
/// 表名
/// Bson集合
public void InsertMany(string collection, IEnumerable list)
{
Database.GetCollection(collection).InsertMany(list);
}
///
/// 插入多条数据
///
///
/// 表名
/// 集合
public void InsertManyAsync(string collection, IEnumerable list)
{
Database.GetCollection(collection).InsertManyAsync(list);
}
///
/// 插入多条数据
///
/// 表名
/// Bson集合
public void InsertManyAsync(string collection, IEnumerable list)
{
Database.GetCollection(collection).InsertManyAsync(list);
}
///
/// 大批量插入数据
///
///
/// 表名
/// 数据集合
///
public List> BulkInsert(string collection, IEnumerable> list)
{
BulkWriteResult result = Database.GetCollection(collection).BulkWrite(list);
return result.ProcessedRequests.ToList();
}
///
/// 大批量插入数据
///
/// 表名
/// Bson数据集合
///
public List> BulkInsert(string collection, IEnumerable> list)
{
BulkWriteResult result = Database.GetCollection(collection).BulkWrite(list);
return result.ProcessedRequests.ToList();
}
///
/// 大批量插入数据
///
///
/// 表名
/// 数据集合
///
public async Task>> BulkInsertAsync(string collection, IEnumerable> list)
{
BulkWriteResult result = await Database.GetCollection(collection).BulkWriteAsync(list);
return result.ProcessedRequests.ToList();
}
///
/// 大批量插入数据
///
/// 表名
/// Bson数据集合
///
public async Task>> BulkInsertAsync(string collection, IEnumerable> list)
{
BulkWriteResult result = await Database.GetCollection(collection).BulkWriteAsync(list);
return result.ProcessedRequests.ToList();
}
#endregion
#region 更新
///
/// 修改一条数据
///
///
/// 表名
/// 条件
/// 更新的数据
/// 如果它不存在是否插入文档
///
public string UpdateOne(string collection, Expression> filter, UpdateDefinition update, bool upsert)
{
UpdateResult result = Database.GetCollection(collection).UpdateOne(filter, update, new UpdateOptions() { IsUpsert = upsert });
return result.ToJson();
}
///
/// 修改一条数据
///
/// 表名
/// 条件
/// 更新的数据
/// 如果它不存在是否插入文档
///
public string UpdateOne(string collection, Expression> filter, UpdateDefinition update, bool upsert)
{
UpdateResult result = Database.GetCollection(collection).UpdateOne(filter, update, new UpdateOptions() { IsUpsert = upsert });
return result.ToJson();
}
///
/// 修改一条数据
///
///
/// 表名
/// 条件
/// 更新的数据
/// 如果它不存在是否插入文档
///
public async Task UpdateOneAsync(string collection, Expression> filter, UpdateDefinition update, bool upsert)
{
UpdateResult result = await Database.GetCollection(collection).UpdateOneAsync(filter, update, new UpdateOptions() { IsUpsert = upsert });
return result.ToJson();
}
///
/// 修改一条数据
///
/// 表名
/// 条件
/// 更新的数据
/// 如果它不存在是否插入文档
///
public async Task UpdateOneAsync(string collection, Expression> filter, UpdateDefinition update, bool upsert)
{
UpdateResult result = await Database.GetCollection(collection).UpdateOneAsync(filter, update, new UpdateOptions() { IsUpsert = upsert });
return result.ToJson();
}
///
/// 修改文档
///
/// 集合名称
/// 修改条件
/// 修改结果
/// 是否插入新文档(filter条件满足就更新,否则插入新文档)
///
public Int64 UpdateMany(String collName, Expression> filter, UpdateDefinition update, Boolean upsert = false)
{
UpdateResult result = Database.GetCollection(collName).UpdateMany(filter, update, new UpdateOptions { IsUpsert = upsert });
return result.ModifiedCount;
}
///
/// 修改文档
///
/// 集合名称
/// 修改条件
/// 修改结果
/// 是否插入新文档(filter条件满足就更新,否则插入新文档)
///
public Int64 UpdateMany(String collName, Expression> filter, UpdateDefinition update, Boolean upsert = false)
{
UpdateResult result = Database.GetCollection(collName).UpdateMany(filter, update, new UpdateOptions { IsUpsert = upsert });
return result.ModifiedCount;
}
///
/// 修改多个文档
///
///
/// 集合名称
/// 修改条件
/// 修改结果
/// 是否插入新文档(filter条件满足就更新,否则插入新文档)
///
public async Task UpdateManyAsync(String collName, Expression> filter, UpdateDefinition update, Boolean upsert = false)
{
UpdateResult result = await Database.GetCollection(collName).UpdateManyAsync(filter, update, new UpdateOptions { IsUpsert = upsert });
return result.ModifiedCount;
}
///
/// 修改多个文档
///
/// 集合名称
/// 修改条件
/// 修改结果
/// 是否插入新文档(filter条件满足就更新,否则插入新文档)
///
public async Task UpdateManyAsync(String collName, Expression> filter, UpdateDefinition update, Boolean upsert = false)
{
UpdateResult result = await Database.GetCollection(collName).UpdateManyAsync(filter, update, new UpdateOptions { IsUpsert = upsert });
return result.ModifiedCount;
}
///
/// 修改文档
///
///
/// 表名
/// 条件
/// 更新后的数据
///
public T UpdateOne(String collName, Expression> filter, UpdateDefinition update)
{
T result = Database.GetCollection(collName).FindOneAndUpdate(filter, update);
return result;
}
///
/// 修改文档
///
/// 表名
/// 条件
/// 更新后的Bson数据
///
public BsonDocument UpdateOne(String collName, Expression> filter, UpdateDefinition update)
{
BsonDocument result = Database.GetCollection(collName).FindOneAndUpdate(filter, update);
return result;
}
///
/// 修改文档
///
///
/// 表名
/// 条件
/// 更新后的数据
///
public async Task UpdateOneAsync(String collName, Expression> filter, UpdateDefinition update)
{
T result = await Database.GetCollection(collName).FindOneAndUpdateAsync(filter, update);
return result;
}
///
/// 修改文档
///
/// 表名
/// 条件
/// 更新后的Bson数据
///
public async Task UpdateOneAsync(String collName, Expression> filter, UpdateDefinition update)
{
BsonDocument result = await Database.GetCollection(collName).FindOneAndUpdateAsync(filter, update);
return result;
}
#endregion
#region 删除
///
/// 按BsonDocument条件删除
///
/// 集合名称
/// 文档
///
public Int64 Delete(String collection, BsonDocument document)
{
DeleteResult result = Database.GetCollection(collection).DeleteOne(document);
return result.DeletedCount;
}
///
/// 按BsonDocument条件删除
///
/// 集合名称
/// 文档
///
public Int64 DeleteMany(String collection, BsonDocument document)
{
DeleteResult result = Database.GetCollection(collection).DeleteMany(document);
return result.DeletedCount;
}
///
/// 按BsonDocument条件删除
///
/// 集合名称
/// 文档
///
public Int64 Delete(String collection, BsonDocument document)
{
DeleteResult result = Database.GetCollection(collection).DeleteOne(document);
return result.DeletedCount;
}
///
/// 按BsonDocument条件删除
///
/// 集合名称
/// 文档
///
public Int64 DeleteMany(String collection, BsonDocument document)
{
DeleteResult result = Database.GetCollection(collection).DeleteMany(document);
return result.DeletedCount;
}
///
/// 按BsonDocument条件删除
///
/// 集合名称
/// 文档
///
public async Task DeleteAsync(String collection, BsonDocument document)
{
DeleteResult result = await Database.GetCollection(collection).DeleteOneAsync(document);
return result.DeletedCount;
}
///
/// 按BsonDocument条件删除
///
/// 集合名称
/// 文档
///
public async Task DeleteManyAsync(String collection, BsonDocument document)
{
DeleteResult result = await Database.GetCollection(collection).DeleteManyAsync(document);
return result.DeletedCount;
}
///
/// 按BsonDocument条件删除
///
/// 集合名称
/// 文档
///
public async Task DeleteAsync(String collection, BsonDocument document)
{
DeleteResult result = await Database.GetCollection(collection).DeleteOneAsync(document);
return result.DeletedCount;
}
///
/// 按BsonDocument条件删除
///
/// 集合名称
/// 文档
///
public async Task DeleteManyAsync(String collection, BsonDocument document)
{
DeleteResult result = await Database.GetCollection(collection).DeleteManyAsync(document);
return result.DeletedCount;
}
///
/// 按json字符串删除
///
/// 集合名称
/// json字符串
///
public Int64 Delete(String collName, String json)
{
var result = Database.GetCollection(collName).DeleteOne(json);
return result.DeletedCount;
}
///
/// 按json字符串删除
///
/// 集合名称
/// json字符串
///
public Int64 DeleteMany(String collName, String json)
{
var result = Database.GetCollection(collName).DeleteMany(json);
return result.DeletedCount;
}
///
/// 按json字符串删除
///
/// 集合名称
/// json字符串
///
public Int64 Delete(String collName, String json)
{
var result = Database.GetCollection(collName).DeleteOne(json);
return result.DeletedCount;
}
///
/// 按json字符串删除
///
/// 集合名称
/// json字符串
///
public Int64 DeleteMany(String collName, String json)
{
var result = Database.GetCollection(collName).DeleteMany(json);
return result.DeletedCount;
}
///
/// 按json字符串删除
///
/// 集合名称
/// json字符串
///
public async Task DeleteAsync(String collName, String json)
{
var result = await Database.GetCollection(collName).DeleteOneAsync(json);
return result.DeletedCount;
}
///
/// 按json字符串删除
///
/// 集合名称
/// json字符串
///
public async Task DeleteManyAsync(String collName, String json)
{
var result = await Database.GetCollection(collName).DeleteManyAsync(json);
return result.DeletedCount;
}
///
/// 按json字符串删除
///
/// 集合名称
/// json字符串
///
public async Task DeleteAsync(String collName, String json)
{
var result = await Database.GetCollection(collName).DeleteOneAsync(json);
return result.DeletedCount;
}
///
/// 按json字符串删除
///
/// 集合名称
/// json字符串
///
public async Task DeleteManyAsync(String collName, String json)
{
var result = await Database.GetCollection(collName).DeleteManyAsync(json);
return result.DeletedCount;
}
///
/// 按条件表达式删除
///
/// 集合名称
/// 条件表达式
///
public Int64 Delete(String collName, Expression> predicate)
{
var result = Database.GetCollection(collName).DeleteOne(predicate);
return result.DeletedCount;
}
///
/// 按条件表达式删除
///
/// 集合名称
/// 条件表达式
///
public Int64 DeleteMany(String collName, Expression> predicate)
{
var result = Database.GetCollection(collName).DeleteMany(predicate);
return result.DeletedCount;
}
///
/// 按条件表达式删除
///
/// 集合名称
/// 条件表达式
///
public Int64 Delete(String collName, Expression> predicate)
{
var result = Database.GetCollection(collName).DeleteOne(predicate);
return result.DeletedCount;
}
///
/// 按条件表达式删除
///
/// 集合名称
/// 条件表达式
///
public Int64 DeleteMany(String collName, Expression> predicate)
{
var result = Database.GetCollection(collName).DeleteMany(predicate);
return result.DeletedCount;
}
///
/// 按条件表达式删除
///
/// 集合名称
/// 条件表达式
///
public async Task DeleteAsync(String collName, Expression> predicate)
{
var result = await Database.GetCollection(collName).DeleteOneAsync(predicate);
return result.DeletedCount;
}
///
/// 按条件表达式删除
///
/// 集合名称
/// 条件表达式
///
public async Task DeleteManyAsync(String collName, Expression> predicate)
{
var result = await Database.GetCollection(collName).DeleteManyAsync(predicate);
return result.DeletedCount;
}
///
/// 按条件表达式删除
///
/// 集合名称
/// 条件表达式
///
public async Task DeleteAsync(String collName, Expression> predicate)
{
var result = await Database.GetCollection(collName).DeleteOneAsync(predicate);
return result.DeletedCount;
}
///
/// 按条件表达式删除
///
/// 集合名称
/// 条件表达式
///
public async Task DeleteManyAsync(String collName, Expression> predicate)
{
var result = await Database.GetCollection(collName).DeleteManyAsync(predicate);
return result.DeletedCount;
}
///
/// 按检索条件删除
/// 建议用Builders<T>构建复杂的查询条件
///
/// 集合名称
/// 条件
///
public Int64 Delete(String collName, FilterDefinition filter)
{
var result = Database.GetCollection(collName).DeleteOne(filter);
return result.DeletedCount;
}
///
/// 按检索条件删除
/// 建议用Builders<T>构建复杂的查询条件
///
/// 集合名称
/// 条件
///
public Int64 DeleteMany(String collName, FilterDefinition filter)
{
var result = Database.GetCollection(collName).DeleteMany(filter);
return result.DeletedCount;
}
///
/// 按检索条件删除
/// 建议用Builders<T>构建复杂的查询条件
///
/// 集合名称
/// 条件
///
public Int64 Delete(String collName, FilterDefinition filter)
{
var result = Database.GetCollection(collName).DeleteOne(filter);
return result.DeletedCount;
}
///
/// 按检索条件删除
/// 建议用Builders<T>构建复杂的查询条件
///
/// 集合名称
/// 条件
///
public Int64 DeleteMany(String collName, FilterDefinition filter)
{
var result = Database.GetCollection(collName).DeleteMany(filter);
return result.DeletedCount;
}
///
/// 按检索条件删除
/// 建议用Builders<T>构建复杂的查询条件
///
/// 集合名称
/// 条件
///
public async Task DeleteAsync(String collName, FilterDefinition filter)
{
var result = await Database.GetCollection(collName).DeleteOneAsync(filter);
return result.DeletedCount;
}
///
/// 按检索条件删除
/// 建议用Builders<T>构建复杂的查询条件
///
/// 集合名称
/// 条件
///
public async Task DeleteManyAsync(String collName, FilterDefinition filter)
{
var result = await Database.GetCollection(collName).DeleteManyAsync(filter);
return result.DeletedCount;
}
///
/// 按检索条件删除
/// 建议用Builders<T>构建复杂的查询条件
///
/// 集合名称
/// 条件
///
public async Task DeleteAsync(String collName, FilterDefinition filter)
{
var result = await Database.GetCollection(collName).DeleteOneAsync(filter);
return result.DeletedCount;
}
///
/// 按检索条件删除
/// 建议用Builders<T>构建复杂的查询条件
///
/// 集合名称
/// 条件
///
public async Task DeleteManyAsync(String collName, FilterDefinition filter)
{
var result = await Database.GetCollection(collName).DeleteManyAsync(filter);
return result.DeletedCount;
}
///
/// 删除一条记录
///
///
/// 表名
/// 条件
///
public T DeleteOne(String collName, Expression> filter)
{
T result = Database.GetCollection(collName).FindOneAndDelete(filter);
return result;
}
///
/// 删除一条记录
///
/// 表名
/// 条件
///
public BsonDocument DeleteOne(String collName, Expression> filter)
{
BsonDocument result = Database.GetCollection(collName).FindOneAndDelete(filter);
return result;
}
///
/// 删除一条记录
///
///
/// 表名
/// 条件
///
public async Task DeleteOneAsync(String collName, Expression> filter)
{
T result = await Database.GetCollection(collName).FindOneAndDeleteAsync(filter);
return result;
}
///
/// 删除一条记录
///
/// 表名
/// 条件
///
public async Task DeleteOneAsync(String collName, Expression> filter)
{
BsonDocument result = await Database.GetCollection(collName).FindOneAndDeleteAsync(filter);
return result;
}
#endregion
#region 查询
///
/// 查询,复杂查询直接用Linq处理
///
/// 集合名称
/// 要查询的对象
public IQueryable GetQueryable(String collName)
{
return Database.GetCollection(collName).AsQueryable();
}
///
/// 查询,复杂查询直接用Linq处理
///
/// 集合名称
/// 要查询的对象
public IQueryable GetQueryable(String collName)
{
return Database.GetCollection(collName).AsQueryable();
}
///
/// 获取一条数据
///
///
/// 表名
/// 条件
///
public T Get(String collName, FilterDefinition filter)
{
IFindFluent find = Database.GetCollection(collName).Find(filter);
return find.FirstOrDefault();
}
///
/// 获取一条数据
///
/// 表名
/// 条件
///
public BsonDocument Get(String collName, FilterDefinition filter)
{
IFindFluent find = Database.GetCollection(collName).Find(filter);
return find.FirstOrDefault();
}
///
/// 获取一条数据
///
///
/// 表名
/// 条件
///
public async Task GetAsync(String collName, FilterDefinition filter)
{
IAsyncCursor find = await Database.GetCollection(collName).FindAsync(filter);
return await find.FirstOrDefaultAsync();
}
///
/// 获取一条数据
///
/// 表名
/// 条件
///
public async Task GetAsync(String collName, FilterDefinition filter)
{
IAsyncCursor find = await Database.GetCollection(collName).FindAsync(filter);
return await find.FirstOrDefaultAsync();
}
///
/// 获取多条数据
///
///
/// 表名
/// 条件
///
public IEnumerable GetMany(String collName, FilterDefinition filter)
{
IFindFluent find = Database.GetCollection(collName).Find(filter);
return find.ToEnumerable();
}
///
/// 获取多条数据
///
/// 表名
/// 条件
///
public IEnumerable GetMany(String collName, FilterDefinition filter)
{
IFindFluent find = Database.GetCollection(collName).Find(filter);
return find.ToEnumerable();
}
///
/// 获取多条数据
///
///
/// 表名
/// 条件
///
public async Task> GetManyAsync(String collName, FilterDefinition filter)
{
IAsyncCursor find = await Database.GetCollection(collName).FindAsync(filter);
return find.ToEnumerable();
}
///
/// 获取多条数据
///
/// 表名
/// 条件
///
public async Task> GetManyAsync(String collName, FilterDefinition filter)
{
IAsyncCursor find = await Database.GetCollection(collName).FindAsync(filter);
return find.ToEnumerable();
}
///
/// 判断是否存在符合条件的数据
///
///
/// 表名
/// 条件
///
public bool Any(String collName, FilterDefinition filter)
{
IFindFluent find = Database.GetCollection(collName).Find(filter);
return find.Any();
}
///
/// 判断是否存在符合条件的数据
///
/// 表名
/// 条件
///
public bool Any(String collName, FilterDefinition filter)
{
IFindFluent find = Database.GetCollection(collName).Find(filter);
return find.Any();
}
///
/// 判断是否存在符合条件的数据
///
/// 表名
/// 条件
///
public async Task AnyAsync(String collName, FilterDefinition filter)
{
IAsyncCursor find = await Database.GetCollection(collName).FindAsync(filter);
return await find.AnyAsync();
}
///
/// 判断是否存在符合条件的数据
///
/// 表名
/// 条件
///
public async Task AnyAsync(String collName, FilterDefinition filter)
{
IAsyncCursor find = await Database.GetCollection(collName).FindAsync(filter);
return await find.AnyAsync();
}
#endregion
}
}