首页 > 数据库 >c#操作mongodb数据库工具类

c#操作mongodb数据库工具类

时间:2023-11-08 22:00:38浏览次数:38  
标签:MongoDBToolHelper c# mongodb 数据库 public using var query col

新建c#项目,在nuget中引入MongoDB.Driver驱动,然后新建一个MongoDBToolHelper类,将下面代码复制进去

using MongoDB.Bson;
using MongoDB.Bson.Serialization;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Hy.DBUtility.Common
{
    /// <summary>
    /// mongodb数据库帮助类
    /// </summary>
    public class MongoDBToolHelper
    {
        /// <summary>
        /// 数据库名称
        /// </summary>
        public string ConnectionNamse { get; set; }

        /// <summary>
        /// 数据库连接字符串
        /// </summary>
        public string PBConStr { get; set; } = "";

        public string connStr
        {
            get
            {
                try
                {
                    string database = "";
                    var db = ConfigurationManager.ConnectionStrings[this.ConnectionNamse];
                    if (db != null)
                    {
                        database = db.ConnectionString;
                    }
                    else
                    {
                        database = ConfigurationManager.AppSettings[this.ConnectionNamse];
                    }
                    if (!string.IsNullOrEmpty(database))
                    {
                        return database;
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(PBConStr))
                        {
                            database = PBConStr;
                        }
                    }
                    return database;
                }
                catch (Exception ex)
                {
                    return "";
                }
            }
        }

        /// <summary>
        /// 获取数据库
        /// </summary>
        /// <returns></returns>
        public MongoDatabase GetMongoDB()
        {
            return new MongoClient(connStr).GetServer().GetDatabase(ConnectionNamse);
        }

        public MongoCollection<BsonDocument> GetCol<T>()
        {
            return GetMongoDB().GetCollection(typeof(T).Name);
        }

        /// <summary>
        /// 新增
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity"></param>
        /// <returns></returns>
        public T Add<T>(T entity)
        {
            var col = GetCol<T>();
            col.Insert(entity);
            return entity;
        }

        /// <summary>
        /// 编辑
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity"></param>
        /// <param name="id"></param>
        public void Update<T>(T entity, string id)
        {
            var col = GetCol<T>();
            ObjectId tId = new ObjectId(id);
            BsonDocument bsd = BsonExtensionMethods.ToBsonDocument(entity);
            IMongoQuery query = Query.EQ("_id", tId);
            col.Update(query, new UpdateDocument(bsd));
        }

        /// <summary>
        /// 编辑
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity"></param>
        /// <param name="id"></param>
        public void Update<T>(IMongoQuery query, IMongoUpdate update, bool updateMulti = false)
        {
            var col = GetCol<T>();
            if (updateMulti)
            {
                col.Update(query, update, UpdateFlags.Multi);// 更新多条
                return;
            }
            col.Update(query, update);
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dics"></param>
        public void Delete<T>(Dictionary<string, object> dics)
        {
            var col = GetCol<T>();
            var query = new QueryDocument(dics);
            col.Remove(query);
        }

        /// <summary>
        /// 删除
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dics"></param>
        public void Delete<T>(IMongoQuery query)
        {
            var col = GetCol<T>();
            col.Remove(query);
        }

        /// <summary>
        /// 删除所有数据
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dics"></param>
        public void DeleteAll<T>()
        {
            var col = GetCol<T>();
            col.RemoveAll();
        }

        /// <summary>
        /// 删除
        /// remark:根据ObjectId删除
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="id"></param>
        public void Delete<T>(string id)
        {
            var col = GetCol<T>();
            ObjectId tId = new ObjectId(id);
            IMongoQuery query = Query.EQ("_id", tId);
            col.Remove(query);
        }

        /// <summary>
        /// 查找单个实体数据
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public T Find<T>(IMongoQuery query)
        {
            var col = GetCol<T>();
            return col.FindAs<T>(query).FirstOrDefault();
        }

        /// <summary>
        /// 查找单个实体数据
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public T FindById<T>(string id)
        {
            var col = GetCol<T>();
            ObjectId tId = new ObjectId(id);
            BsonDocument bsonDocument = col.FindOneById(tId);
            T t = BsonSerializer.Deserialize<T>(bsonDocument);
            return t;
        }

        /// <summary>
        /// 查询全部
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public List<T> QueryList<T>()
        {
            var col = GetCol<T>();
            var result = col.FindAllAs<T>();
            return result.ToList();
        }

        /// <summary>
        /// 根据条件查询
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="dics"></param>
        /// <returns></returns>
        public List<T> QueryList<T>(Dictionary<string, object> dics)
        {
            var col = GetCol<T>();
            var query = new QueryDocument(dics);
            var result = col.FindAs<T>(query);
            return result.ToList<T>();
        }

        /// <summary>
        /// 分页查询
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public List<T> QueryPageList<T>(int pageIndex, int pageSize, IMongoQuery query, string[] sortFields)
        {
            var col = GetCol<T>();
            var result = col.FindAs<T>(query).SetSortOrder(SortBy.Descending(sortFields))
                            .Skip((pageIndex - 1) * pageSize)
                            .Take(pageSize)
                            .ToList();
            return result;
        }

        /// <summary>
        /// 查询条数
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public long Count<T>(IMongoQuery query = null)
        {
            var col = GetCol<T>();
            long n = col.Count(query);
            return n;
        }
    }

    /**
     * 项目引用:MongoDB.Driver
     * 操作集合实体案例:
     *    /// <summary>
          /// 注意:实体名就是集合名称,必须一致
          /// </summary>
          [BsonIgnoreExtraElements]
          public class TEST
          {
              public ObjectId _id { get; set; }
              public string OrderId { get; set; }
              public string OrderCode { get; set; }
          }

         连接字符串配置:
         <appSettings>
            <add key="TEST" value="mongodb://TEST:[email protected]:27017/TEST"/>
         </appSettings>

         查询调用方式:
          //var sd = MongoDBConfig.MongoDBToolHelper_TEST.QueryList<TEST>();
            //var sd = MongoDBConfig.MongoDBToolHelper_TEST.QueryPageList<TEST>(1, 10, null, new string[] { "OrderId" });
            //var mdoel = MongoDBConfig.MongoDBToolHelper_TEST.Find<TEST>( Query.EQ("OrderId", "111"));
            var mdoel = MongoDBConfig.MongoDBToolHelper_TEST.FindById<TEST>("222");

        注意:所有操作的T实体,实体名称必须与集合名称一致
         
     */
}

下面是mongodb配置类,同上操作,这里只封装了基本的操作,如果有其他的操作可以自行封装

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Hy.DBUtility.Common
{
    /// <summary>
    /// mongodb数据库配置类
    /// </summary>
    public class MongoDBConfig
    {
        private static MongoDBToolHelper _MongoDBToolHelper_TEST;
        public static MongoDBToolHelper MongoDBToolHelper_TEST
        {
            get
            {
                if (_MongoDBToolHelper_TEST == null)
                {
                    _MongoDBToolHelper_TEST = new MongoDBToolHelper();
                    _MongoDBToolHelper_TEST.ConnectionNamse = "TEST";
                }
                return _MongoDBToolHelper_TEST;
            }
        }
    }
}

 

标签:MongoDBToolHelper,c#,mongodb,数据库,public,using,var,query,col
From: https://www.cnblogs.com/wenghan/p/17818439.html

相关文章

  • C# 获取系统时间
    //2017年7月24日System.DateTime.Now.ToString("D");//2017-7-24System.DateTime.Now.ToString("d");//2017年7月24日13:46:15System.DateTime.Now.ToString("F");//......
  • c++简单的二分查找
    ints(intshuzu[],intlen,intx){ intlow=0,hight=len-1,mid; while(low<=hight) { mid=(low+hight)/2; if(shuzu[mid]==x)returnshuzu[mid]; elseif(shuzu[mid]<x)hight=mid-1; elselow=mid+1; } return-1;}i......
  • Python 数据库应用教程:安装 MySQL 及使用 MySQL Connector
    Python可以用于数据库应用程序。其中最流行的数据库之一是MySQL。MySQL数据库为了能够在本教程中尝试代码示例,您应该在计算机上安装MySQL。您可以在MySQL官方网站下载MySQL数据库。安装MySQL驱动程序Python需要一个MySQL驱动程序来访问MySQL数据库。在本教程中,我们将使用......
  • 【django开发】知识经验总结共50页md文档。今日分享:django配置和数据库操作详解
    Django的主要目的是简便、快速的开发数据库驱动的网站。它强调代码复用,多个组件可以很方便的以"插件"形式服务于整个框架,Django有许多功能强大的第三方插件,你甚至可以很方便的开发出自己的工具包。这使得Django具有很强的可扩展性。它还强调快速开发和DRY(DoNotRepeatYourself)原......
  • D - ABC Puzzle -- ATCODER ABC 326
    D-ABCPuzzlehttps://atcoder.jp/contests/abc326/tasks/abc326_dSampleInput1Copy5ABCBCACAABSampleOutput1CopyYesAC..B.BA.CC.BA.BA.C...CBA思路充分利用约束条件,构造算法,避免穷举所有情况,然后再根据约束条件判断情况的合法性。 如下代码,优......
  • vue2+antd 使用select 通过v-model 无法回显也不能修改?
    <template><a-tablesize="middle":data-source="dataList":pagination="false":locale="{emptyText:'暂无数据'}":scroll="{x:'max-content'}"><a-table-columntitle=......
  • PowerShell 函数遇见 Newtonsoft.Json.JsonReaderException: The reader's MaxDepth o
    问题描述创建PowerShellAzureDurableFunction,执行大量的PowerShell脚本操作AzureResource,遇见了一个非常非常奇怪的问题:Function'Hello1(Activity)'failedwithanerror.Reason:Newtonsoft.Json.JsonReaderException:Thereader'sMaxDepthof64hasbeenexceeded.Pa......
  • Uncaught TypeError: Cannot read property ‘addEventListener‘ of null 求助!!!!!!
    今天在项目中遇到个问题如下:vue项目中public的index.html文件script标签引入了一个外部的js文件,里面有一个方法每次调用的时候都会报错UncaughtTypeError:Cannotreadproperty‘addEventListener‘ofnull,网上查的所有办法都试过了:跟标签摆放先后位置,放到onload方法中都没......
  • 【Azure Durable Function】PowerShell Activity 函数遇见 Newtonsoft.Json.JsonReade
    问题描述创建PowerShellAzureDurableFunction,执行大量的PowerShell脚本操作AzureResource,遇见了一个非常非常奇怪的问题:Function'Hello1(Activity)'failedwithanerror.Reason:Newtonsoft.Json.JsonReaderException:Thereader'sMaxDepthof64hasbeenexceeded.......
  • 高斯数据库HCNA之SQL语法入门
    一、SQL语句概述1、SQL语句介绍维基百科的定义:SQL(StructuredQueryLanguage,结构性查询语句)是一种特定目的编程语言,用于管理关系数据库管理系统,或在关系流数据管理系统中进行流处理SQL基于关系代数和元组关系演算,包括一个数据定义语言和数据操作语言SQL的范围包括数据插入、......