如何在.Net中使用MongoDB

发布网友

我来回答

2个回答

懂视网

System; using System.Collections.Generic; using System.Linq; using System.Text; using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Builders; namespace Soffice.DeveloperTools.Bll { public class CsSystem { /// <summary> /// 获取分页列表数据 /// </summary> /// <param name="total">记录总数</param> /// <param name="pageIndex">当前页</param> /// <param name="pageSize">每页显示多少条</param> /// <param name="where">where条件</param> /// <returns></returns> public static List<ModelDb.CsSystem> GetList(out int total, int pageIndex, int pageSize, ModelMvc.CsSystemWhere where) { MongoClient client = new MongoClient("mongodb://localhost"); MongoServer server = client.GetServer(); MongoDatabase database = server.GetDatabase("CoreSystem"); MongoCollection collection = database.GetCollection<ModelDb.CsSystem>("CsSystem"); total = Convert.ToInt32(collection.Count()); return collection.FindAllAs<ModelDb.CsSystem>().Skip((pageIndex - 1) * pageSize).Take(pageSize).ToList(); } /// <summary> /// 获取DtGrid列表数据 /// </summary> /// <param name="gridParam">Grid传入参数</param> /// <returns></returns> public static string GetGrid(string gridParam) { ModelMvc.CsSystemDtGrid grid = CommonFunction.Deserialize<ModelMvc.CsSystemDtGrid>(gridParam); int total = 0; List<ModelDb.CsSystem> listDb = GetList(out total, grid.nowPage, grid.pageSize, grid.parameters); List<ModelMvc.CsSystemGridData> gridDatas = new List<ModelMvc.CsSystemGridData>(); foreach (ModelDb.CsSystem m in listDb) { gridDatas.Add(new ModelMvc.CsSystemGridData { Id = m.Id, TypesName = CsDict.CsSystem_Types.Where(w => w.Id == m.Types).Select(s => s.ItemValue).FirstOrDefault(), Names = m.Names, Code = m.Code, EntryUrl = m.EntryUrl, Remark = m.Remark, IsEnabledName = m.IsEnabled ? "是" : "否" }); } grid.isSuccess = true; grid.recordCount = total; grid.exhibitDatas = gridDatas; return CommonFunction.Serialize(grid); } /// <summary> /// 根据主键id获取编辑数据 /// </summary> /// <param name="id"></param> /// <returns></returns> public static ModelMvc.CsSystemForm GetEditInfo(int id) { MongoClient client = new MongoClient("mongodb://localhost"); MongoServer server = client.GetServer(); MongoDatabase database = server.GetDatabase("CoreSystem"); MongoCollection collection = database.GetCollection<ModelDb.CsSystem>("CsSystem"); var query = Query.EQ("_id", id); ModelDb.CsSystem m = collection.FindOneAs<ModelDb.CsSystem>(query); return new ModelMvc.CsSystemForm { Id = m.Id, Types = m.Types, Names = m.Names, Code = m.Code, EntryUrl = m.EntryUrl, IsEnabled = m.IsEnabled, Remark = m.Remark }; } /// <summary> /// 保存新增 /// </summary> /// <param name="m">表单数据</param> /// <returns></returns> public static bool SaveAdd(ModelMvc.CsSystemForm m) { CommonValid valid = new CommonValid(m); if (valid.IsValid) { MongoClient client = new MongoClient("mongodb://localhost"); MongoServer server = client.GetServer(); MongoDatabase database = server.GetDatabase("CoreSystem"); MongoCollection collection = database.GetCollection<ModelDb.CsSystem>("CsSystem"); return collection.Insert(new ModelDb.CsSystem { Id = m.Id, Types = m.Types, Names = m.Names, Code = m.Code, EntryUrl = m.EntryUrl, IsEnabled = m.IsEnabled, Remark = m.Remark }).Ok; } else { throw new ExceptionValid(valid); } } /// <summary> /// 保存新增 /// </summary> /// <param name="m">表单数据</param> /// <returns></returns> public static bool SaveEdit(ModelMvc.CsSystemForm m) { CommonValid valid = new CommonValid(m); if (valid.IsValid) { MongoClient client = new MongoClient("mongodb://localhost"); MongoServer server = client.GetServer(); MongoDatabase database = server.GetDatabase("CoreSystem"); MongoCollection collection = database.GetCollection<ModelDb.CsSystem>("CsSystem"); return collection.Save(new ModelDb.CsSystem { Id = m.Id, Types = m.Types, Names = m.Names, Code = m.Code, EntryUrl = m.EntryUrl, IsEnabled = m.IsEnabled, Remark = m.Remark }).Ok; } else { throw new ExceptionValid(valid); } } /// <summary> /// 删除 /// </summary> /// <param name="id"></param> /// <returns></returns> public static bool SaveDelete(int id) { MongoClient client = new MongoClient("mongodb://localhost"); MongoServer server = client.GetServer(); MongoDatabase database = server.GetDatabase("CoreSystem"); var collection = database.GetCollection<ModelDb.CsSystem>("CsSystem"); var query = Query.EQ("_id", id); return collection.Remove(query).Ok; } } }

Model代码:

using System;

namespace Soffice.DeveloperTools.ModelDb
{
 public class CsSystem
 {
 /// <summary>
 /// Id
 /// </summary> 
 public int Id { get; set; }
 /// <summary>
 /// 1.子系统,2.其它第三方系统
 /// </summary> 
 public int Types { get; set; }
 /// <summary>
 /// Names
 /// </summary> 
 public string Names { get; set; }
 /// <summary>
 /// Code
 /// </summary> 
 public string Code { get; set; }
 /// <summary>
 /// EntryUrl
 /// </summary> 
 public string EntryUrl { get; set; }
 /// <summary>
 /// Remark
 /// </summary> 
 public string Remark { get; set; }
 /// <summary>
 /// IsEnabled
 /// </summary> 
 public bool IsEnabled { get; set; }
 }
}

注意:Model中有些关键字MongoDb会自动转换掉。例如像:"Id"这个属性,如果存在MongoDb中会被转成"_id"。

有些时候查询条件查不到的时候请去数据库中检查真实存在的属性名称。并且注意要区分大小写。

 

如有转载请流下原创地址。

如何在.Net中使用MongoDB

标签:

热心网友

首先在项目中引入 MongoDB.Bson.dll,MongoDB.Driver.dll,MongoDB.Driver.Core.dll 我使用的是2.0版本的 现在好多文章都是介绍使用1+版本的 引入驱动DLL后,就可以开始撸代码了。

以下仅供参考:

private static MongoClient client;
private static IMongoDatabase database;
//本地配置
private const string MongoDBConnectionStr = "mongodb://localhost";
//数据库名称
private static string DefaultDataBaseName = "Test";
 
 
public MongoDBHelper()
{
    GetConnection(DefaultDataBaseName);
}
 
/// <summary>
/// 构造函数 指定数据库
/// </summary>
/// <param name="dataBaseName"></param>
public MongoDBHelper(string dataBaseName)
{
    GetConnection(dataBaseName);
}
 
private static void GetConnection(string dataBaseName)
{
    client = new MongoClient(MongoDBConnectionStr);
    database = client.GetDatabase(dataBaseName);
}
 
/// <summary>
/// 异步插入一条数据,手动输入collection name
/// </summary>
public Task InsertAsync<T>(string collectionName, T obj)
{
    if (database == null)
    {
        throw new Exception("没有指定数据库");
    }
    var collection = database.GetCollection<T>(collectionName);
    return collection.InsertOneAsync(obj);
}
 
/// <summary>
/// 异步插入一条数据,采用类型T的完全限定名作为collection name
/// </summary>
public Task InsertAsync<T>(T obj)
{
    return InsertAsync(typeof(T).FullName, obj);
}
 
/// <summary>
/// 异步插入多条数据,手动输入collection name
/// </summary>
public Task BatchInsertAsync<T>(string collectionName, IEnumerable<T> objs)
{
    if (database == null)
    {
        throw new Exception("没有指定数据库");
    }
    if (objs == null)
    {
        throw new ArgumentException();
    }
    var collection = database.GetCollection<T>(collectionName);
    return collection.InsertManyAsync(objs);
}
 
/// <summary>
/// 异步插入多条数据,采用类型T的完全限定名作为collection name
/// </summary>
public Task BatchInsertAsync<T>(IEnumerable<T> objs)
{
    return BatchInsertAsync(typeof(T).FullName, objs);
}
 
/// <summary>
/// 插入一条数据
/// </summary>
public void Insert<T>(T obj)
{
    InsertAsync(obj).Wait();
}
 
/// <summary>
/// 插入多条数据
/// </summary>
public void Insert<T>(IEnumerable<T> objs)
{
    BatchInsertAsync(objs).Wait();
}
 
/// <summary>
/// MongoDB C# Driver的Find方法,返回IFindFluent。手动输入collection name
/// </summary>
public IFindFluent<T, T> Find<T>(string collectionName, FilterDefinition<T> filter, FindOptions options = null)
{
    if (database == null)
    {
        throw new Exception("没有指定数据库");
    }
    var collection = database.GetCollection<T>(collectionName);
    return collection.Find(filter, options);
}
 
/// <summary>
/// MongoDB C# Driver的Find方法,返回IFindFluent。采用类型T的完全限定名作为collection name
/// </summary>
public IFindFluent<T, T> Find<T>(FilterDefinition<T> filter, FindOptions options = null)
{
    return Find(typeof(T).FullName, filter, options);
}
 
/// <summary>
/// 取符合条件的数据 sort中多个排序条件逗号分隔,默认asc
/// </summary>
public List<T> Get<T>(Expression<Func<T, bool>> condition, int skip, int limit, string sort)
{
    return Get(new List<Expression<Func<T, bool>>> { condition }, skip, limit, sort);
}
 
public List<T> Get<T>(Expression<Func<T, bool>> condition)
{
    return Get(condition, 0, 0, null);
}
 
/// <summary>
/// 取符合条件的数据 sort中多个排序条件逗号分隔,默认asc
/// </summary>
public List<T> Get<T>(List<Expression<Func<T, bool>>> conditions, int skip, int limit, string sort)
{
    if (conditions == null || conditions.Count == 0)
    {
        conditions = new List<Expression<Func<T, bool>>> { x => true };
    }
    var builder = Builders<T>.Filter;
    var filter = builder.And(conditions.Select(x => builder.Where(x)));
 
    var ret = new List<T>();
    try
    {
        List<SortDefinition<T>> sortDefList = new List<SortDefinition<T>>();
        if (sort != null)
        {
            var sortList = sort.Split(',');
            for (var i = 0; i < sortList.Length; i++)
            {
                var sl = Regex.Replace(sortList[i].Trim(), @"\s+", " ").Split(' ');
                if (sl.Length == 1 || (sl.Length >= 2 && sl[1].ToLower() == "asc"))
                {
                    sortDefList.Add(Builders<T>.Sort.Ascending(sl[0]));
                }
                else if (sl.Length >= 2 && sl[1].ToLower() == "desc")
                {
                    sortDefList.Add(Builders<T>.Sort.Descending(sl[0]));
                }
            }
        }
        var sortDef = Builders<T>.Sort.Combine(sortDefList);
        ret = Find(filter).Sort(sortDef).Skip(skip).Limit(limit).ToListAsync().Result;
    }
    catch (Exception e)
    {
       //异常处理
    }
    return ret;
}
 
public List<T> Get<T>(List<Expression<Func<T, bool>>> conditions)
{
    return Get(conditions, 0, 0, null);
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com