public class MongoDBSingleton
{
private static readonly MongoDBSingleton instance = new MongoDBSingleton();
private MongoDatabase _db;
private MongoDBSingleton() { _db = new MongoDB().GetDataBaseOne(); }
/// <summary>
/// 获取单实例
/// </summary>
public static MongoDBSingleton Instance
{
get
{
return instance;
}
}
/// <summary>
/// ObjectId的键
/// </summary>
private readonly string OBJECTID_KEY = "_id";
#region 插入数据
/// <summary>
/// 将数据插入进数据库
/// </summary>
/// <typeparam name="T">需要插入数据的类型</typeparam>
/// <param name="t">需要插入的具体实体</param>
public bool Insert<T>(T t)
{
//集合名称
string collectionName = typeof(T).Name;
return Insert<T>(t, collectionName);
}
/// <summary>
/// 将数据插入进数据库
/// </summary>
/// <typeparam name="T">需要插入数据库的实体类型</typeparam>
/// <param name="t">需要插入数据库的具体实体</param>
/// <param name="collectionName">指定插入的集合</param>
public bool Insert<T>(T t, string collectionName)
{
bool isPass = true;
MongoCollection<BsonDocument> mc = this._db.GetCollection<BsonDocument>(collectionName);
//将实体转换为json文档
BsonDocument bd = t.ToBsonDocument();
//进行插入操作
WriteConcernResult result = mc.Insert(bd);
if (!string.IsNullOrEmpty(result.ErrorMessage))
{
isPass = false;
throw new Exception(result.ErrorMessage);
}
return isPass;
}
/// <summary>
/// 批量插入数据
/// </summary>
/// <typeparam name="T">需要插入数据库的实体类型</typeparam>
/// <param name="list">需要插入数据的列表</param>
public bool Insert<T>(List<T> list)
{
//集合名称
string collectionName = typeof(T).Name;
return this.Insert<T>(list, collectionName);
}
/// <summary>
/// 批量插入数据
/// </summary>
/// <typeparam name="T">需要插入数据库的实体类型</typeparam>
/// <param name="list">需要插入数据的列表</param>
/// <param name="collectionName">指定要插入的集合</param>
public bool Insert<T>(List<T> list, string collectionName)
{
try
{
MongoCollection<BsonDocument> mc = this._db.GetCollection<BsonDocument>(collectionName);
//创建一个空间json集合
List<BsonDocument> bsonList = new List<BsonDocument>();
//批量将数据转为json格式 并且放进json文档
list.ForEach(t => bsonList.Add(t.ToBsonDocument()));
//批量插入数据
mc.InsertBatch(bsonList);
return true;
}
catch (Exception ex)
{
return false;
}
}
#endregion
#region 查询数据
#region 查询所有记录
/// <summary>
/// 查询一个集合中的所有数据
/// </summary>
/// <typeparam name="T">该集合数据的所属类型</typeparam>
/// <param name="collectionName">指定集合的名称</param>
/// <returns>返回一个List列表</returns>
public List<T> FindAll<T>(string collectionName)
{
MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
//以实体方式取出其数据集合
MongoCursor<T> mongoCursor = mc.FindAll();
//直接转化为List返回
return mongoCursor.ToList<T>();
}
/// <summary>
/// 查询一个集合中的所有数据 其集合的名称为T的名称
/// </summary>
/// <typeparam name="T">该集合数据的所属类型</typeparam>
/// <returns>返回一个List列表</returns>
public List<T> FindAll<T>()
{
string collectionName = typeof(T).Name;
return FindAll<T>(collectionName);
}
#endregion
#region 查询一条记录
/// <summary>
/// 查询一条记录
/// </summary>
/// <typeparam name="T">该数据所属的类型</typeparam>
/// <param name="query">查询的条件 可以为空</param>
/// <param name="collectionName">去指定查询的集合</param>
/// <returns>返回一个实体类型</returns>
public T FindOne<T>(IMongoQuery query, string collectionName)
{
MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
query = this.InitQuery(query);
T t = mc.FindOne(query);
return t;
}
/// <summary>
/// 查询一条记录
/// </summary>
/// <typeparam name="T">该数据所属的类型</typeparam>
/// <param name="collectionName">去指定查询的集合</param>
/// <returns>返回一个实体类型</returns>
public T FindOne<T>(string collectionName)
{
return FindOne<T>(null, collectionName);
}
/// <summary>
/// 查询一条记录
/// </summary>
/// <typeparam name="T">该数据所属的类型</typeparam>
/// <returns>返回一个实体类型</returns>
public T FindOne<T>()
{
string collectionName = typeof(T).Name;
return FindOne<T>(null, collectionName);
}
/// <summary>
/// 查询一条记录
/// </summary>
/// <typeparam name="T">该数据所属的类型</typeparam>
/// <param name="query">查询的条件 可以为空</param>
/// <returns>返回一个实体类型</returns>
public T FindOne<T>(IMongoQuery query)
{
string collectionName = typeof(T).Name;
return FindOne<T>(query, collectionName);
}
#endregion
#region 普通的条件查询
/// <summary>
/// 根据指定条件查询集合中的数据
/// </summary>
/// <typeparam name="T">该集合数据的所属类型</typeparam>
/// <param name="query">指定的查询条件 比如Query.And(Query.EQ("username","admin"),Query.EQ("password":"admin"))</param>
/// <param name="collectionName">指定的集合的名称</param>
/// <returns>返回一个List列表</returns>
public List<T> Find<T>(IMongoQuery query, string collectionName)
{
MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
query = this.InitQuery(query);
MongoCursor<T> mongoCursor = mc.Find(query);
return mongoCursor.ToList<T>();
}
/// <summary>
/// 根据指定条件查询集合中的数据
/// </summary>
/// <typeparam name="T">该集合数据的所属类型</typeparam>
/// <param name="query">指定的查询条件 比如Query.And(Query.EQ("username","admin"),Query.EQ("password":"admin"))</param>
/// <param name="collectionName">指定的集合的名称</param>
/// <returns>返回一个List列表</returns>
public List<T> Find<T>(IMongoQuery query, SortByDocument sortBy, string collectionName)
{
MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
query = this.InitQuery(query);
MongoCursor<T> mongoCursor = mc.Find(query).SetSortOrder(sortBy);
return mongoCursor.ToList<T>();
}
/// <summary>
/// 根据指定条件查询集合中的数据记录数
/// </summary>
/// <typeparam name="T">该集合数据的所属类型</typeparam>
/// <param name="query">指定的查询条件 比如Query.And(Query.EQ("username","admin"),Query.EQ("password":"admin"))</param>
/// <param name="collectionName">指定的集合的名称</param>
/// <returns>返回一个List列表</returns>
public long FindCount<T>(IMongoQuery query, string collectionName)
{
MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
query = this.InitQuery(query);
MongoCursor<T> mongoCursor = mc.Find(query);
return mongoCursor.Count();
}
/// <summary>
/// 根据指定条件查询集合中的数据
/// </summary>
/// <typeparam name="T">该集合数据的所属类型</typeparam>
/// <param name="query">指定的查询条件 比如Query.And(Query.EQ("username","admin"),Query.EQ("password":"admin"))</param>
/// <returns>返回一个List列表</returns>
public List<T> Find<T>(IMongoQuery query)
{
string collectionName = typeof(T).Name;
return this.Find<T>(query);
}
/// <summary>
/// 获取前N条数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="query"></param>
/// <param name="top"></param>
/// <param name="indexName"></param>
/// <param name="collectionName"></param>
/// <returns></returns>
public List<T> Find<T>(IMongoQuery query, int top, string indexName, string collectionName)
{
MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
MongoCursor<T> mongoCursor = mc.Find(query).SetLimit(top);
return mongoCursor.ToList<T>();
}
/// <summary>
/// 获取前N条数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="query"></param>
/// <param name="top"></param>
/// <param name="indexName"></param>
/// <param name="collectionName"></param>
/// <returns></returns>
public List<T> Find<T>(IMongoQuery query, int top, string indexName, string collectionName, SortByDocument sortBy)
{
MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
MongoCursor<T> mongoCursor = mc.Find(query).SetSortOrder(sortBy).SetLimit(top);
return mongoCursor.ToList<T>();
}
#endregion
#region 分页查询 PageIndex和PageSize模式 在页数PageIndex大的情况下 效率明显变低
/// <summary>
/// 分页查询 PageIndex和PageSize模式 在页数PageIndex大的情况下 效率明显变低
/// </summary>
/// <typeparam name="T">所需查询的数据的实体类型</typeparam>
/// <param name="query">查询的条件</param>
/// <param name="pageIndex">当前的页数</param>
/// <param name="pageSize">当前的尺寸</param>
/// <param name="sortBy">排序方式</param>
/// <param name="collectionName">集合名称</param>
/// <returns>返回List列表</returns>
public List<T> Find<T>(IMongoQuery query, int pageIndex, int pageSize, SortByDocument sortBy, string collectionName)
{
MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
MongoCursor<T> mongoCursor = null;
query = this.InitQuery(query);
sortBy = this.InitSortBy(sortBy);
//如页序号为0时初始化为1
pageIndex = pageIndex == 0 ? 1 : pageIndex;
//按条件查询 排序 跳数 取数
mongoCursor = mc.Find(query).SetSortOrder(sortBy).SetSkip((pageIndex - 1) * pageSize).SetLimit(pageSize);
return mongoCursor.ToList<T>();
}
/// <summary>
/// 分页查询 PageIndex和PageSize模式 在页数PageIndex大的情况下 效率明显变低
/// </summary>
/// <typeparam name="T">所需查询的数据的实体类型</typeparam>
/// <param name="query">查询的条件</param>
/// <param name="fd">指定查询的字段</param>
/// <param name="pageIndex">当前的页数</param>
/// <param name="pageSize">当前的尺寸</param>
/// <param name="sortBy">排序方式</param>
/// <param name="collectionName">集合名称</param>
/// <returns>返回List列表</returns>
public List<T> FindFields<T>(IMongoQuery query, FieldsDocument fd, int pageIndex, int pageSize, SortByDocument sortBy, string collectionName)
{
//try
//{
MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
MongoCursor<T> mongoCursor = null;
query = this.InitQuery(query);
sortBy = this.InitSortBy(sortBy);
//如页序号为0时初始化为1
pageIndex = pageIndex == 0 ? 1 : pageIndex;
//按条件查询 排序 跳数 取数
mongoCursor = mc.Find(query).SetFields(fd).SetSortOrder(sortBy).SetSkip((pageIndex - 1) * pageSize).SetLimit(pageSize);
return mongoCursor.ToList<T>();
//}
//catch (Exception ex)
//{
// string ss;
// ss = ex.Message.ToString();
//}
//return null;
}
/// <summary>
/// 分页查询 PageIndex和PageSize模式 在页数PageIndex大的情况下 效率明显变低
/// </summary>
/// <typeparam name="T">所需查询的数据的实体类型</typeparam>
/// <param name="query">查询的条件</param>
/// <param name="pageIndex">当前的页数</param>
/// <param name="pageSize">当前的尺寸</param>
/// <param name="sortBy">排序方式</param>
/// <returns>返回List列表</returns>
public List<T> Find<T>(IMongoQuery query, int pageIndex, int pageSize, SortByDocument sortBy)
{
string collectionName = typeof(T).Name;
return this.Find<T>(query, pageIndex, pageSize, sortBy, collectionName);
}
#endregion
#region 分页查询 指定索引最后项-PageSize模式
/// <summary>
/// 分页查询 指定索引最后项-PageSize模式
/// </summary>
/// <typeparam name="T">所需查询的数据的实体类型</typeparam>
/// <param name="query">查询的条件 没有可以为null</param>
/// <param name="indexName">索引名称</param>
/// <param name="lastKeyValue">最后索引的值</param>
/// <param name="pageSize">分页的尺寸</param>
/// <param name="sortType">排序类型 1升序 -1降序 仅仅针对该索引</param>
/// <param name="collectionName">指定的集合名称</param>
/// <returns>返回一个List列表数据</returns>
public List<T> Find<T>(IMongoQuery query, string indexName, object lastKeyValue, int pageSize, int sortType, string collectionName)
{
MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
MongoCursor<T> mongoCursor = null;
query = this.InitQuery(query);
//判断升降序后进行查询
if (sortType > 0)
{
//升序
if (lastKeyValue != null)
{
//有上一个主键的值传进来时才添加上一个主键的值的条件
query = Query.And(query, Query.GT(indexName, BsonValue.Create(lastKeyValue)));
}
//先按条件查询 再排序 再取数
mongoCursor = mc.Find(query).SetSortOrder(new SortByDocument(indexName, 1)).SetLimit(pageSize);
}
else
{
//降序
if (lastKeyValue != null)
{
query = Query.And(query, Query.LT(indexName, BsonValue.Create(lastKeyValue)));
}
mongoCursor = mc.Find(query).SetSortOrder(new SortByDocument(indexName, -1)).SetLimit(pageSize);
}
return mongoCursor.ToList<T>();
}
/// <summary>
/// 分页查询 指定索引最后项-PageSize模式
/// </summary>
/// <typeparam name="T">所需查询的数据的实体类型</typeparam>
/// <param name="query">查询的条件 没有可以为null</param>
/// <param name="indexName">索引名称</param>
/// <param name="lastKeyValue">最后索引的值</param>
/// <param name="pageSize">分页的尺寸</param>
/// <param name="sortType">排序类型 1升序 -1降序 仅仅针对该索引</param>
/// <returns>返回一个List列表数据</returns>
public List<T> Find<T>(IMongoQuery query, string indexName, object lastKeyValue, int pageSize, int sortType)
{
string collectionName = typeof(T).Name;
return this.Find<T>(query, indexName, lastKeyValue, pageSize, sortType, collectionName);
}
/// <summary>
/// 分页查询 指定ObjectId最后项-PageSize模式
/// </summary>
/// <typeparam name="T">所需查询的数据的实体类型</typeparam>
/// <param name="query">查询的条件 没有可以为null</param>
/// <param name="lastObjectId">上一条记录的ObjectId 没有可以为空</param>
/// <param name="pageSize">每页尺寸</param>
/// <param name="sortType">排序类型 1升序 -1降序 仅仅针对_id</param>
/// <param name="collectionName">指定去查询集合的名称</param>
/// <returns>返回一个List列表数据</returns>
public List<T> Find<T>(IMongoQuery query, string lastObjectId, int pageSize, int sortType, string collectionName)
{
return this.Find<T>(query, OBJECTID_KEY, new ObjectId(lastObjectId), pageSize, sortType, collectionName);
}
/// <summary>
/// 分页查询 指定ObjectId最后项-PageSize模式
/// </summary>
/// <typeparam name="T">所需查询的数据的实体类型</typeparam>
/// <param name="query">查询的条件 没有可以为null</param>
/// <param name="lastObjectId">上一条记录的ObjectId 没有可以为空</param>
/// <param name="pageSize">每页尺寸</param>
/// <param name="sortType">排序类型 1升序 -1降序 仅仅针对_id</param>
/// <returns>返回一个List列表数据</returns>
public List<T> Find<T>(IMongoQuery query, string lastObjectId, int pageSize, int sortType)
{
string collectionName = typeof(T).Name;
return Find<T>(query, lastObjectId, pageSize, sortType, collectionName);
}
#endregion
#endregion
#region 更新数据
/// <summary>
/// 更新数据
/// </summary>
/// <typeparam name="T">更新的数据 所属的类型</typeparam>
/// <param name="query">更新数据的查询</param>
/// <param name="update">需要更新的文档</param>
public bool Update<T>(IMongoQuery query, IMongoUpdate update)
{
string collectionName = typeof(T).Name;
return this.Update<T>(query, update, collectionName);
}
/// <summary>
/// 更新数据
/// </summary>
/// <typeparam name="T">更新的数据 所属的类型</typeparam>
/// <param name="query">更新数据的查询</param>
/// <param name="update">需要更新的文档</param>
/// <param name="collectionName">指定更新集合的名称</param>
public bool Update<T>(IMongoQuery query, IMongoUpdate update, string collectionName)
{
try
{
MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
query = this.InitQuery(query);
//更新数据
WriteConcernResult result = mc.Update(query, update, UpdateFlags.None);
return true;
}
catch (Exception ex)
{
return false;
}
}
#endregion
#region 移除/删除数据
/// <summary>
/// 移除指定的数据
/// </summary>
/// <typeparam name="T">移除的数据类型</typeparam>
/// <param name="query">移除的数据条件</param>
/// <param name="collectionName">指定的集合名词</param>
public bool Remove<T>(IMongoQuery query, string collectionName)
{
try
{
MongoCollection<T> mc = this._db.GetCollection<T>(collectionName);
query = this.InitQuery(query);
//根据指定查询移除数据
mc.Remove(query);
return true;
}
catch (Exception ex)
{
return false;
}
}
/// <summary>
/// 移除指定的数据
/// </summary>
/// <typeparam name="T">移除的数据类型</typeparam>
/// <param name="query">移除的数据条件</param>
public void Remove<T>(IMongoQuery query)
{
string collectionName = typeof(T).Name;
this.Remove<T>(query, collectionName);
}
/// <summary>
/// 移除实体里面所有的数据
/// </summary>
/// <typeparam name="T">移除的数据类型</typeparam>
public void ReomveAll<T>()
{
string collectionName = typeof(T).Name;
this.Remove<T>(null);
}
/// <summary>
/// 移除实体里面所有的数据
/// </summary>
/// <typeparam name="T">移除的数据类型</typeparam>
/// <param name="collectionName">指定的集合名称</param>
public void RemoveAll<T>(string collectionName)
{
this.Remove<T>(null);
}
#endregion
#region 创建索引
/// <summary>
/// 创建索引
/// </summary>
/// <typeparam name="T">需要创建索引的实体类型</typeparam>
public void CreateIndex<T>()
{
string collectionName = typeof(T).Name;
MongoCollection<BsonDocument> mc = this._db.GetCollection<BsonDocument>(collectionName);
PropertyInfo[] propertys = typeof(T).GetProperties(BindingFlags.IgnoreCase | BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty);
//得到该实体类型的属性
foreach (PropertyInfo property in propertys)
{
//在各个属性中得到其特性
foreach (object obj in property.GetCustomAttributes(true))
{
MongoDBFieldAttribute mongoField = obj as MongoDBFieldAttribute;
if (mongoField != null)
{// 此特性为mongodb的字段属性
IndexKeysBuilder indexKey;
if (mongoField.Ascending)
{
//升序 索引
indexKey = IndexKeys.Ascending(property.Name);
}
else
{
//降序索引
indexKey = IndexKeys.Ascending(property.Name);
}
//创建该属性
mc.CreateIndex(indexKey, IndexOptions.SetUnique(mongoField.Unique));
}
}
}
}
#endregion
#region 获取集合的存储大小
/// <summary>
/// 获取集合的存储大小
/// </summary>
/// <typeparam name="T">该集合对应的实体类</typeparam>
/// <returns>返回一个long型</returns>
public long GetDataSize<T>()
{
string collectionName = typeof(T).Name;
return GetDataSize(collectionName);
}
/// <summary>
/// 获取集合的存储大小
/// </summary>
/// <param name="collectionName">该集合对应的名称</param>
/// <returns>返回一个long型</returns>
public long GetDataSize(string collectionName)
{
MongoCollection<BsonDocument> mc = this._db.GetCollection<BsonDocument>(collectionName);
return mc.GetTotalStorageSize();
}
#endregion
#region 私有的一些辅助方法
/// <summary>
/// 初始化查询记录 主要当该查询条件为空时 会附加一个恒真的查询条件,防止空查询报错
/// </summary>
/// <param name="query">查询的条件</param>
/// <returns></returns>
private IMongoQuery InitQuery(IMongoQuery query)
{
if (query == null)
{
//当查询为空时 附加恒真的条件 类似SQL:1=1的语法
query = Query.Exists(OBJECTID_KEY);
}
return query;
}
/// <summary>
/// 初始化排序条件 主要当条件为空时 会默认以ObjectId递增的一个排序
/// </summary>
/// <param name="sortBy"></param>
/// <returns></returns>
private SortByDocument InitSortBy(SortByDocument sortBy)
{
if (sortBy == null)
{
//默认ObjectId 递增
sortBy = new SortByDocument(OBJECTID_KEY, -1);
}
return sortBy;
}
#endregion
#region 通过mongoGridS保存文件
/// <summary>
/// 通过mongoGridS保存文件
/// </summary>
/// <param name="FileData">文件二进制流</param>
/// <param name="FileName">文件名称</param>
public bool SaveFilesByGridFS(byte[] FileData, string FileName, BsonDocument doc, string FilesType)
{
bool flag = false;
try
{
MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = FilesType };
MongoGridFS fs = new MongoGridFS(_db, fsSetting);
//通过Metadata 添加附加信息
MongoGridFSCreateOptions option = new MongoGridFSCreateOptions();
option.UploadDate = DateTime.Now;
//BsonDocument doc = new BsonDocument();
//doc.Add("UserID", 1L);
//doc.Add("GUID", System.Guid.NewGuid());
option.Metadata = doc;
//创建文件,文件并存储数据
using (MongoGridFSStream gfs = fs.Create(FileName, option))
{
gfs.Write(FileData, 0, FileData.Length);
gfs.Close();
}
flag = true;
}
catch (Exception e)
{
flag = false;
}
return flag;
}
#endregion
#region 通过mongoGridS得到图片
/// <summary>
/// 通过mongoGridS得到图片
/// </summary>
/// <param name="FileData">文件二进制流</param>
/// <param name="FileName">文件名称</param>
public byte[] GetFileByGridFS(string ResGuid, string FilesType)
{
byte[] bytes;
try
{
MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = FilesType };
MongoGridFS gridfs = new MongoGridFS(_db, fsSetting);
// 定义查询条件
var query = new QueryDocument();
var b = new BsonDocument();
b.Add("metadata.GUID", ResGuid);
query.Add(b);
//得到文件信息
MongoGridFSFileInfo VideoInfo = gridfs.FindOne(query);
if (VideoInfo != null)
{
//读取
using (MongoGridFSStream gridFileStream = VideoInfo.OpenRead())
{
//数组大小
bytes = new byte[gridFileStream.Length];
//存入二进制
gridFileStream.Read(bytes, 0, (int)gridFileStream.Length);
// gridfs.Download(_Stream, query, 1);
}
}
else
{
bytes = null;
}
}
catch (Exception e)
{
bytes = null;
}
return bytes;
}
#endregion
#region 通过ResGuid,删除图片
/// <summary>
/// 通过ResGuid,删除图片
/// </summary>
/// <param name="FileData">文件二进制流</param>
/// <param name="FileName">文件名称</param>
public bool DelFileByGridFS(string ResGuid, string FilesType)
{
bool flag = false;
try
{
MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = FilesType };
MongoGridFS gridfs = new MongoGridFS(_db, fsSetting);
// 定义查询条件
var query = new QueryDocument();
var b = new BsonDocument();
b.Add("metadata.GUID", ResGuid);
query.Add(b);
//得到文件信息
MongoGridFSFileInfo ExistImage = gridfs.FindOne(query);
if (ExistImage != null)
{
ExistImage.Delete();
flag = true;
}
else
{
flag = false;
}
}
catch (Exception e)
{
flag = false;
}
return flag;
}
#endregion
}
public MongoDatabase GetDataBaseOne()
{
MongoClientSettings mongoSetting = new MongoClientSettings();
//设置连接超时时间
mongoSetting.ConnectTimeout = new TimeSpan(CONNECT_TIME_OUT * TimeSpan.TicksPerSecond);
mongoSetting.MaxConnectionLifeTime = new TimeSpan(CONNECT_LIFE_TIME * TimeSpan.TicksPerSecond);
//设定最大连接池
mongoSetting.MinConnectionPoolSize = 10;
//等待列队数量
mongoSetting.WaitQueueSize = 50;
//设置数据库服务器
mongoSetting.Server = new MongoServerAddress(MONGO_CONN_HOST1, MONGO_CONN_PORT1);
//创建Mongo的客户端
MongoClient client = new MongoClient(mongoSetting);
//设置用户名和密码
MongoCredentials mc = new MongoCredentials(ConfigConstant.MUSER1, ConfigConstant.MPWD1);
MongoConnectionStringBuilder mcsb = new MongoConnectionStringBuilder();
MongoServer ms = client.GetServer();
ms.Connect();
//得到服务器端并且生成数据库实例
return ms.GetDatabase(DB_NAME1, mc);
}