|
该类封装了 MongoDB的一些常用操作,使用只需要从该类继承,并实现GetDataBaseName() 获取数据库名称方法 和 GetCollectionName()获取集合名称,即可实现MongoDB的CRUD操作,该基类带一个MongoDB 分页方法。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MongoDB.Driver;
using MongoDB.Bson;
using MongoDB.Driver.Builders;
namespace sc.MongoDBDataAccess
{
public abstract class BaseMgDAL
{
static readonly string connectionString = System.Configuration.ConfigurationManager.AppSettings["MongoDBConn"]; //string.Empty ;// "mongodb://localhost";
static MongoClient client = null;
static protected MongoServer server = null;
protected MongoDatabase database = null;//子类的数据库
protected MongoCollection collection = null;//子类的集合
static SortByDocument DEF_SORT_ASC = new SortByDocument("_id", 1);
static SortByDocument DEF_SORT_DESC = new SortByDocument("_id", -1);
//////////////////////////////////split line///////////////////////////////
///
/// 静态构造函数
///
static BaseMgDAL()
{
client = new MongoClient(connectionString);
server = client.GetServer();
}
///
/// 构造函数
///
public BaseMgDAL()
{
database = server.GetDatabase(GetDataBaseName());
collection = database.GetCollection(GetCollectionName());
}
///
/// 插入一个项目
///
/// 要插入的项目
/// 返回该对象
public T Insert(T obj)
{
collection.Insert(obj);
return obj;
}
///
/// 更新一条数据
///
///
///
public bool Update(T obj)
{
try
{
collection.Save(obj);
return true;
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 删除一条数据
///
///
///
public bool Delete(ObjectId id)
{
try
{
var querry = Query.EQ("_id", id);
collection.Remove(querry);
return true;
}
catch (Exception ex)
{
throw ex;
}
}
///
/// 根据ObjectId获取数据
///
///
///
public T GetByID(ObjectId id)
{
var query = Query.EQ("_id", id);
var result = collection.FindOne(query);
return result;
}
///
/// 返回分页结果
///
/// 查询条件
/// 集合
/// 开始序号
/// 结束序号
/// 查询的结果集
public MongoCursor MongoDBPage(IMongoQuery mongoQuery, MongoCollection collection, long startIndex, long endIndex)
{
if (startIndex < 0 || endIndex < 0)
throw new ArgumentException("索引必须从零开始,且不能小于零");
long maxSize = MongoDBCount(mongoQuery, collection);//查询总数据
if (startIndex > maxSize)
return null;
//获取要返回的数据大小
long selectSize = startIndex + endIndex;
if (selectSize > maxSize)
selectSize = maxSize;
long returnSize = selectSize - startIndex;
return collection.Find(mongoQuery).SetSortOrder(DEF_SORT_ASC)
.SetLimit((int)selectSize)
.SetSortOrder(DEF_SORT_DESC)
.SetLimit((int)returnSize)
.SetSortOrder(DEF_SORT_ASC);
}
///
/// 获取结果集大小
///
/// 查询条件
/// MongoDB集合
///
public long MongoDBCount(IMongoQuery mongoQuery, MongoCollection collection)
{
return collection.Find(mongoQuery).Count();
}
public abstract string GetDataBaseName();
public abstract string GetCollectionName();
}
} |
|
|