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;
}
}
}
}
C#操作mongodb数据库的更多相关文章
- 不使用spring的情况下原生java代码两种方式操作mongodb数据库
由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常. 主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...
- 不使用spring的情况下用java原生代码操作mongodb数据库的两种方式
由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常. 主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...
- NodeJs连接操作MongoDB数据库
NodeJs连接操作MongoDB数据库 一,介绍 MongoDB是一种文档导向数据库管理系统,由C++撰写而成.介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作. Mongo ...
- C# Asp.net中简单操作MongoDB数据库(二)
C# Asp.net中简单操作MongoDB数据库(一) , mongodb数据库连接可以回顾上面的篇幅. 1.model类: public class BaseEntity { /// < ...
- C# Asp.net中简单操作MongoDB数据库(一)
需要引用MongoDB.Driver.dll.MongoDB.Driver.core.dll.MongoDB.Bson.dll三个dll. 1.数据库连接: public class MongoDb ...
- PHP操作MongoDB 数据库
最近有个项目,需要用php操作mongoDb数据,整理如下 1,连接MongoDB数据库 $conn = new Mongo(); 其他链接方式 //$conn=new Mongo(); #连接本地主 ...
- python操作三大主流数据库(10)python操作mongodb数据库④mongodb新闻项目实战
python操作mongodb数据库④mongodb新闻项目实战 参考文档:http://flask-mongoengine.readthedocs.io/en/latest/ 目录: [root@n ...
- python操作三大主流数据库(9)python操作mongodb数据库③mongodb odm模型mongoengine的使用
python操作mongodb数据库③mongodb odm模型mongoengine的使用 文档:http://mongoengine-odm.readthedocs.io/guide/ 安装pip ...
- python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查
python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...
- python操作三大主流数据库(7)python操作mongodb数据库①mongodb的安装和简单使用
python操作mongodb数据库①mongodb的安装和简单使用 参考文档:中文版:http://www.mongoing.com/docs/crud.html英文版:https://docs.m ...
随机推荐
- 通过代码创建label 计算最佳尺寸 让其自适应文本高度或宽度
通过xib创建label 让label随着文本内容的变化而动态改变尺寸比较简单 只要不固定死尺寸就可以了 但是通过代码创建的话我们需要给label设置一个frame 否则label默认是没有尺 ...
- Java并发编程专题
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/4852149. ...
- [转]win7 64位下android开发环境的搭建
本文转自:http://www.cfanz.cn/index.php?c=article&a=read&id=65289 最近换了新电脑,装了win7 64位系统,安装了各种开发环境, ...
- ASP多行多列又一个方法
<table border=1 width="200"> <% col=4 '列数 i=1 Do While i<=100 If i Mod col=1 T ...
- 几个linux命令
常用linux命令: 普通用户命令: 一.文件和目录查看类命令 1. ls (常用参数 -l 和-h) 蓝颜色:表示目录 绿颜色:表示可执行文件 红颜色:表示压缩文件 白颜色:表示普通文件 青色:表示 ...
- listview使用checkbox批量删除出现的问题
1.选中前面的checkbox导致后的checkbox被选中 2.选中后下滑listview,再上滑时被选中的checkbox又变成未选中状态. 问题大都是因为对listview进行代码优化重用con ...
- Android 内存溢出管理与测试
今天发现正在做的项目,时不时的会报错:dalvikvm heap out of memory on a 7458832-byte allocation (堆分配的内存溢出) 为什么会内存溢出呢?我以前 ...
- Android四大组件之BroadcastReceiver
什么是BroadcastReceiver? BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播. 在Android系统中,广播体现在方方面面, ...
- 设计模式------STRATEGY(策略模式)
http://blog.csdn.net/wuzhekai1985/article/details/6665197.仅供参考. 策略模式:实现替换功能,如cache替换算法:当发生Cache缺失时,C ...
- Centos7最小化安装后(minimal)安装图形界面
centos7下载地址:http://mirrors.cqu.edu.cn/CentOS/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso 下载后用vmwa ...