项目要求:将外部数据同步到mongodb
需要安装mongodb驱动包:MongoDB.Driver ,此处用到的版本是2.12.3
实现代码:
using MongoDB.Bson;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading.Tasks;
namespace DS_Repository
{
public class MongoDbHelper
{
#region 属性及变量
/// <summary>
/// 服务器地址
/// </summary>
private string _connString; // "mongodb://127.0.0.1:27017"
/// <summary>
/// 数据库名称
/// </summary>
private string _databaseName; // "Test"
/// <summary>
/// 集合名称
/// </summary>
private string _collectionName;
#endregion
#region 构造函数
/// <summary>
///
/// </summary>
/// <param name="connString">连接字符串</param>
/// <param name="databaseName">数据库名称</param>
public MongoDbHelper(string connString, string databaseName)
{
this._connString = connString;
this._databaseName = databaseName;
CreateClient();
}
#endregion
#region 链接数据库
private IMongoClient _mongoclient { get; set; }
private IMongoClient CreateClient()
{
if (_mongoclient == null)
{
var settings = MongoClientSettings.FromConnectionString(_connString);
settings.MaxConnectionPoolSize = 500;
_mongoclient = new MongoClient(settings);
}
return _mongoclient;
}
/// <summary>
/// 返回数据库对象
/// </summary>
private IMongoDatabase _database { get { return _mongoclient.GetDatabase(_databaseName); } }
/// <summary>
/// 返回数据库对象
/// </summary>
public IMongoDatabase GetDatabase()
{
return _database;
}
/// <summary>
/// 设置当前需要操作的集合名称
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public void SetCurrentCollection(string collName)
{
_collectionName = collName;
var db = _database;
var coll = db.GetCollection<dynamic>(_collectionName);
if (coll == null)
{
db.CreateCollection(_collectionName);
}
}
/// <summary>
/// 获取集合对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public IMongoCollection<T> GetCollection<T>() where T : class, new()
{
return _database.GetCollection<T>(_collectionName);
}
#endregion
#region 数据操作
#region +Add 添加一条数据
/// <summary>
/// 添加一条数据
/// </summary>
/// <param name="t">添加的实体</param>
/// <param name="host">mongodb连接信息</param>
/// <returns></returns>
public bool Add<T>(T t) where T : class, new()
{
try
{
var client = _database.GetCollection<T>(_collectionName);
client.InsertOne(t);
return true;
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
#region +AddAsync 异步添加一条数据
/// <summary>
/// 异步添加一条数据
/// </summary>
/// <param name="t">添加的实体</param>
/// <param name="host">mongodb连接信息</param>
/// <returns></returns>
public async Task<bool> AddAsync<T>(T t) where T : class, new()
{
try
{
var client = _database.GetCollection<T>(_collectionName);
await client.InsertOneAsync(t);
return true;
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
#region +InsertMany 批量插入
/// <summary>
/// 批量插入
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="t">实体集合</param>
/// <returns></returns>
public bool InsertMany<T>(List<T> t) where T : class, new()
{
try
{
var client = _database.GetCollection<T>(_collectionName);
client.InsertMany(t);
return true;
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
#region +InsertManyAsync 异步批量插入
/// <summary>
/// 异步批量插入
/// </summary>
/// <param name="host">mongodb连接信息</param>
/// <param name="t">实体集合</param>
/// <returns></returns>
public async Task<bool> InsertManyAsync<T>(List<T> t) where T : class, new()
{
try
{
var client = _database.GetCollection<T>(_collectionName);
await client.InsertManyAsync(t);
return true;
}
catch (Exception ex)
{
throw ex;
}
}
#endregion
#region +Update 修改一条数据
/// <summary>
/// 修改一条数据
/// </summary>
/// <param name="t">添加的实体</param>
/// <param name="host">mongodb连接信息</param>
/// <returns></returns>
public UpdateResult Update<T>(T t, string id, bool isObjectI