zoukankan      html  css  js  c++  java
  • C#操作mongodb数据库

    1、下载驱动:

    如下图:选择c#解决方案,右键,点击 “管理NuGet程序包(N)...”

    在弹出的对话框中,输入MongoDB.Driver,进行搜索,然后选择安装。

    2、引用命名空间:

    using MongoDB.Bson;
    using MongoDB.Driver;
    using MongoDB.Driver.Core;

    3、程序代码

    配置文件:


    public class iCTRMongodbCache : CacheBase
    {
      IMongoCollection<BsonDocument> _collect;

      IMongoDatabase _db;
      string _collectionName = "";
      /// <summary>
      /// 默认搜索列字段名称
      /// </summary>
      string defaultColumn = ConfigurationManager.AppSettings["DefaultColumn"].ToString();

      /// <summary>
      /// 构造函数
      /// </summary>
      /// <param name="collectionName">集合名称,类似关系型数据库中的表名</param>
      public iCTRMongodbCache(string collectionName)
        : base(collectionName)
      {
        _collectionName = collectionName;
        string mongoDB_Host = ConfigurationManager.AppSettings["MongoDB_Host"].ToString();
        string mongoDB_DbName = ConfigurationManager.AppSettings["MongoDB_DbName"].ToString();
        string mongoDB_UserName = ConfigurationManager.AppSettings["MongoDB_UserName"].ToString();
        string mongoDB_Password = ConfigurationManager.AppSettings["MongoDB_Password"].ToString();
        MongoDB.Driver.MongoClient mc = new MongoClient(mongoDB_Host);

        _db = mc.GetDatabase(mongoDB_DbName);
        _collect = _db.GetCollection<BsonDocument>(collectionName);

      }


      public override bool Append(string keyValue, string value)
      {
        if (string.IsNullOrEmpty(value) || value.IndexOf(":") < 0)
         {
          return false;
         }
        Dictionary<string, string> dictR = new Dictionary<string, string>();
        dictR.Add(defaultColumn, keyValue);
        try
        {
          string[] values = value.Split(',');
          foreach (string keyv in values)
          {
            dictR.Add(keyv.Split(':')[0], keyv.Split(':')[1]);
          }
          BsonDocument bd = new BsonDocument();
          bd.AddRange(dictR);
          _collect.InsertOne(bd);
        }
        catch (System.InvalidOperationException ex)
        {
          throw ex;
        }
        return true;
      }

      public override object Get(string keyValue)
      {
        Dictionary<string,object> dict =new Dictionary<string,object>();
        dict.Add(defaultColumn, keyValue);
        var query = new BsonDocument(dict);
        IAsyncCursor<BsonDocument> result = _collect.FindSync(query);

        List<BsonDocument> list = null;
        if (result.MoveNext())
        {
          list = result.Current as List<BsonDocument>;
        }
        return list;
      }

      public override T Get<T>(string keyValue)
      {
        Dictionary<string, object> dict = new Dictionary<string, object>();
        dict.Add(defaultColumn, keyValue);
        var query = new BsonDocument(dict);
        IAsyncCursor<BsonDocument> result = _collect.FindSync(query);
        if (result.MoveNext())
        {
          List<BsonDocument> list = result.Current as List<BsonDocument>;
          if (list != null)
          {
            BsonDocument bd = list[0];
            bd.Remove("_id");
            bd.Remove(defaultColumn);
            JavaScriptSerializer Serializer = new JavaScriptSerializer();
            Serializer.MaxJsonLength = int.MaxValue;
            return Serializer.Deserialize<T>(bd.ToString());
          }
          else
          {
            return default(T);
          }
        }
        else
        {
          return default(T);
        }
      }

      public override void Set(string keyValue, object value, DateTime expiration)
      {
        Dictionary<string, object> dictR = new Dictionary<string, object>();
        dictR.Add(defaultColumn, keyValue);
        try
          {
            BsonDocument bd = value.ToBsonDocument();
            bd.AddRange(dictR);
            _collect.InsertOne(bd);
          }
        catch (System.InvalidOperationException ex)
          {
            throw ex;
          }

        }

      public override void Set<T>(string keyValue, T value)
      {
        Dictionary<string, object> dictR = new Dictionary<string, object>();
        dictR.Add(defaultColumn, keyValue);
        try
          {
            BsonDocument bd = value.ToBsonDocument<T>();
            bd.AddRange(dictR);
            _collect.InsertOne(bd);
          }
        catch (System.InvalidOperationException ex)
        {
          throw ex;
        }
      }

      public override void Remove(string key)
      {
        Dictionary<string, object> dictR = new Dictionary<string, object>();
        dictR.Add(defaultColumn, key);
        _collect.DeleteOne(new BsonDocument(dictR));

      }

      public override void Clear()
      {
        _db.DropCollection(_collectionName);
      }

      public override void Dispose()
      {
        _db.DropCollection(_collectionName);
        _collect = null;
      }
     }

    4、测试代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Microsoft.VisualStudio.TestTools.UnitTesting;
    using MongodbCache.Caching;
    namespace UnitTest
    {
      [TestClass]
      public class iCTRMongodbCacheTest
      {
        private iCTRMongodbCache _cache;
        public iCTRMongodbCacheTest()
        {
        _cache = new iCTRMongodbCache("test1");
      }

      [TestMethod]
      public void TestAppend()
      {
        //ID454为主键字段对应的数据,"age:43,name:Marry为要插入的数据,
        //调用缓存的Append方法,第二个参数必须为类似"column1 : column1Value,column2 : column2Value "的数据
        _cache.Append("ID1", "age:43,name:Marry");
      }

      [TestMethod]
      public void TestSet1()
      {
        Dictionary<string, string> dict = new Dictionary<string, string>();
        dict.Add("age", "12");
        dict.Add("Name", "Marry");
        _cache.Set("ID2", dict);
      }
      [TestMethod]
      public void TestSet2()
      {
        student s = new student();
        s.age = 234;
        s.name = "lengli";
        _cache.Set<student>("ID3", s);
      }

      [TestMethod]
      public void TestRemove()
      {
        string ID = "ID1";
        _cache.Remove(ID);
      }

      [TestMethod]
      public void TestGet1()
      {
        object obj = _cache.Get("ID2");
      }


      [TestMethod]
      public void TestGet2()
      {
        student dd = _cache.Get<student>("ID3");
      }

      [TestMethod]
      public void TestClear()
      {
        _cache.Clear();
      }

      [TestClass]
      class student
      {
        public string name
        {
          get;
          set;
        }


        public int age
        {
          get;
          set;
        }

      }
      }
    }

  • 相关阅读:
    raw socket
    selenium and win32api
    linux ip
    network config
    grub paramiter & menu.list
    实用命令dd
    resin or tomcat .war e.g. note
    JSP 运行
    linux command screen
    docker interact example
  • 原文地址:https://www.cnblogs.com/shaosks/p/5754051.html
Copyright © 2011-2022 走看看