MongoDB入门教程之C#驱动操作实例
作为系列的最后一篇,得要说说C#驱动对mongodb的操作,目前驱动有两种:官方驱动和samus驱动,不过我个人还是喜欢后者,
因为提供了丰富的linq操作,相当方便。
官方驱动:https://github.com/mongodb/mongo-csharp-driver/downloads。下载后,还提供了一个酷似msdn的帮助文档。
samus驱动:https://github.com/samus/mongodb-csharp/downloads。
下面就具体看看samus驱动,https://github.com/samus/mongodb-csharp/blob/master/examples/Simple/Main.cs上面提供了
一个简单的demo,大体上看看我们就知道怎么玩了。
一: 实践
1:我们建立一个Person实体,MongoAlias特性表示取别名,这里的ID值将会覆盖掉数据库自动生成的_id。
#region 数据实体/// summary
/// 数据实体
/// /summary
public class Person
{
[MongoAlias( _id )]
public string ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public DateTime CreateTime { get; set; }
}
#endregion
2:初始化一些变量
string connectionString = string.Empty;string databaseName = string.Empty;
string collectionName = string.Empty;
static MongodbHelper T mongodb;
#region 初始化操作
/// summary
/// 初始化操作
/// /summary
public MongodbHelper()
{
connectionString = Server=127.0.0.1:2222
databaseName = shopex
collectionName = person
}
#endregion
3:为了方便T的继承类使用linq功能,我们还需要映射一下。
#region 实现linq查询的映射配置/// summary
/// 实现linq查询的映射配置
/// /summary
public MongoConfiguration configuration
{
get
{
var config = new MongoConfigurationBuilder();
config.Mapping(mapping =
{
mapping.DefaultProfile(profile =
{
profile.SubClassesAre(t = t.IsSubclassOf(typeof(T)));
});
mapping.Map T
mapping.Map T
});
config.ConnectionString(connectionString);
return config.BuildConfiguration();
}
}
#endregion
4:下面是一些基本的CURD的代码,跟写EF代码很类似,写起来好舒服。
#region 插入操作/// summary
/// 插入操作
/// /summary
/// param name= person /param
/// returns /returns
public void Insert(T t)
{
using (Mongo mongo = new Mongo(configuration))
{
try
{
mongo.Connect();
var db = mongo.GetDatabase(databaseName);
var collection = db.GetCollection T (collectionName);
collection.Insert(t, true);
mongo.Disconnect();
}
catch (Exception)
{
mongo.Disconnect();
throw;
}
}
}
#endregion
#region 更新操作
/// summary
/// 更新操作
/// /summary
/// param name= person /param
/// returns /returns
public void Update(T t, Expression Func T, bool func)
{
using (Mongo mongo = new Mongo(configuration))
{
try
{
mongo.Connect();
var db = mongo.GetDatabase(databaseName);
var collection = db.GetCollection T (collectionName);
collection.Update T (t, func, true);
mongo.Disconnect();
}
catch (Exception)
{
mongo.Disconnect();
throw;
}
}
}
#endregion
#region 获取集合
/// summary
///获取集合
/// /summary
/// param name= person /param
/// returns /returns
public List T List(int pageIndex, int pageSize, Expression Func T, bool func, out int pageCount)
{
pageCount = 0;
using (Mongo mongo = new Mongo(configuration))
{
try
{
mongo.Connect();
var db = mongo.GetDatabase(databaseName);
var collection = db.GetCollection T (collectionName);
pageCount = Convert.ToInt32(collection.Count());
var personList = collection.Linq().Where(func).Skip(pageSize * (pageIndex 1))
.Take(pageSize).Select(i = i).ToList();
mongo.Disconnect();
return personList;
}
catch (Exception)
{
mongo.Disconnect();
throw;
}
}
}
#endregion
#region 读取单条记录
/// summary
///读取单条记录
/// /summary
/// param name= person /param
/// returns /returns
public T Single(Expression Func T, bool func)
{
using (Mongo mongo = new Mongo(configuration))
{
try
{
mongo.Connect();
var db = mongo.GetDatabase(databaseName);
var collection = db.GetCollection T (collectionName);
var single = collection.Linq().FirstOrDefault(func);
mongo.Disconnect();
return single;
}
catch (Exception)
{
mongo.Disconnect();
throw;
}
}
}
#endregion
#region 删除操作
/// summary
/// 删除操作
/// /summary
/// param name= person /param
/// returns /returns
public void Delete(Expression Func T, bool func)
{
using (Mongo mongo = new Mongo(configuration))
{
try
{
mongo.Connect();
var db = mongo.GetDatabase(databaseName);
var collection = db.GetCollection T (collectionName);
//这个地方要注意,一定要加上T参数,否则会当作object类型处理
//导致删除失败
collection.Remove T (func);
mongo.Disconnect();
}
catch (Exception)
{
mongo.Disconnect();
throw;
}
}
}
#endregion
5. 好,我们开一下2222端口,由于前前篇我已经把这个mongodb做成了服务,现在就直接连过去了,并做一下对Name的索引。
6. 一切准备妥当,我们做下基本的操作,比如这里我添加一千条数据,注意我开启的是安全模式,如果插入不成功,将会抛出异常。
1 Add:
static void Main(string[] args)
{
MongodbHelper Person helper = new MongodbHelper Person
//插入1000条数据
for (int i = 0; i 1000; i++)
{
helper.Insert(new Person()
{
ID = Guid.NewGuid().ToString(),
Name = jack + i,
Age = i,
CreateTime = DateTime.Now
});
}
Console.WriteLine( 插入成功 );
Console.Read();
}
乍一看显示的数据以为有问题,为什么没有出现jack0或者jack999,不过find的一下后心情舒坦了。
2 update: 这里就把jack941的名字改掉“mary”
static void Main(string[] args){
MongodbHelper Person helper = new MongodbHelper Person
//修改jack941改成mary
var single = helper.Single(i = i.Name == jack941 );
single.Name = mary
helper.Update(single, i = i.ID == single.ID);
Console.WriteLine( 修改成功 );
Console.Read();
}
3 Delete: 删除mary这条记录
static void Main(string[] args){
MongodbHelper Person helper = new MongodbHelper Person
//删除mary这个记录
helper.Delete(i = i.Name == mary );
Console.WriteLine( 删除成功 );
Console.Read();
}
4 list操作: 这里我获取一下名字里面带9的人数列表
static void Main(string[] args){
MongodbHelper Person helper = new MongodbHelper Person
int pagecount;
//获取名字里面带9的人数
var list = helper.List(1, 20, i = i.Name.Contains( 9 ), out pagecount);
Console.Read();
}
总的运行代码
using System;using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Linq.Expressions;
using MongoDB.Configuration;
using MongoDB.Linq;
using MongoDB.Attributes;
{
public class MongodbHelper T where T : class
{
string connectionString = string.Empty;
string databaseName = string.Empty;
string collectionName = string.Empty;
static MongodbHelper T mongodb;
#region 初始化操作
/// summary
/// 初始化操作
/// /summary
public MongodbHelper()
{
connectionString = Server=127.0.0.1:2222
databaseName = shopex
collectionName = person
}
#endregion
#region 实现linq查询的映射配置
/// summary
/// 实现linq查询的映射配置
/// /summary
public MongoConfiguration configuration
{
get
{
var config = new MongoConfigurationBuilder();
config.Mapping(mapping =
{
mapping.DefaultProfile(profile =
{
profile.SubClassesAre(t = t.IsSubclassOf(typeof(T)));
});
mapping.Map T
mapping.Map T
});
config.ConnectionString(connectionString);
return config.BuildConfiguration();
}
}
#endregion
#region 插入操作
/// summary
/// 插入操作
/// /summary
/// param name= person /param
/// returns /returns
public void Insert(T t)
{
using (Mongo mongo = new Mongo(configuration))
{
try
{
mongo.Connect();
var db = mongo.GetDatabase(databaseName);
var collection = db.GetCollection T (collectionName);
collection.Insert(t, true);
mongo.Disconnect();
}
catch (Exception)
{
mongo.Disconnect();
throw;
}
}
}
#endregion
#region 更新操作
/// summary
/// 更新操作
/// /summary
/// param name= person /param
/// returns /returns
public void Update(T t, Expression Func T, bool func)
{
using (Mongo mongo = new Mongo(configuration))
{
try
{
mongo.Connect();
var db = mongo.GetDatabase(databaseName);
var collection = db.GetCollection T (collectionName);
collection.Update T (t, func, true);
mongo.Disconnect();
}
catch (Exception)
{
mongo.Disconnect();
throw;
}
}
}
#endregion
#region 获取集合
/// summary
///获取集合
/// /summary
/// param name= person /param
/// returns /returns
public List T List(int pageIndex, int pageSize, Expression Func T, bool func, out int pageCount)
{
pageCount = 0;
using (Mongo mongo = new Mongo(configuration))
{
try
{
mongo.Connect();
var db = mongo.GetDatabase(databaseName);
var collection = db.GetCollection T (collectionName);
pageCount = Convert.ToInt32(collection.Count());
var personList = collection.Linq().Where(func).Skip(pageSize * (pageIndex 1))
.Take(pageSize).Select(i = i).ToList();
mongo.Disconnect();
return personList;
}
catch (Exception)
{
mongo.Disconnect();
throw;
}
}
}
#endregion
#region 读取单条记录
/// summary
///读取单条记录
/// /summary
/// param name= person /param
/// returns /returns
public T Single(Expression Func T, bool func)
{
using (Mongo mongo = new Mongo(configuration))
{
try
{
mongo.Connect();
var db = mongo.GetDatabase(databaseName);
var collection = db.GetCollection T (collectionName);
var single = collection.Linq().FirstOrDefault(func);
mongo.Disconnect();
return single;
}
catch (Exception)
{
mongo.Disconnect();
throw;
}
}
}
#endregion
#region 删除操作
/// summary
/// 删除操作
/// /summary
/// param name= person /param
/// returns /returns
public void Delete(Expression Func T, bool func)
{
using (Mongo mongo = new Mongo(configuration))
{
try
{
mongo.Connect();
var db = mongo.GetDatabase(databaseName);
var collection = db.GetCollection T (collectionName);
//这个地方要注意,一定要加上T参数,否则会当作object类型处理
//导致删除失败
collection.Remove T (func);
mongo.Disconnect();
}
catch (Exception)
{
mongo.Disconnect();
throw;
}
}
}
#endregion
}
#region 数据实体
/// summary
/// 数据实体
/// /summary
public class Person
{
[MongoAlias( _id )]
public string ID { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public DateTime CreateTime { get; set; }
}
#endregion
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 MongoDB入门教程之C#驱动操作实例
相关文章
- C#简单串口调试助手【傻瓜教程】chanson_chapter01[通俗易懂]
- 一款完全国产的基于C#语言开发的跨平台的文本解析引擎(模板引擎)
- MongoDB安装及目录结构详解(mongodb安装目录)
- 查询MongoDB中查询多个字段的技巧(mongodb多个字段)
- 分页查询MongoDB中多条件实现高效分页查询(mongodb多条件)
- MongoDB:实现条件删除的新方法(mongodb条件删除)
- 战略合作ES与Mongodb联手,开启双赢的新战略(ES与mongodb)
- MongoDB技术:存储文件的新方式(mongodb存文件)
- MongoDB安全性实践与验证(mongodb安全验证)
- 数据无处不在:MongoDB导入实践(mongodb导入数据)
- Mongodb高效升级至3.0版本(mongodb升级3.0)
- MongoDB查看索引的技巧(mongodb查看索引)
- MongoDB 数据备份:保险起见,手动操作或自动化都应该掌握!(mongodb备份数据)
- 使用MongoDB实现高效图片存储与管理(mongodb图片存储)
- 控制MongoDB 数据库访问安全控制(mongodb访问)
- MongoDB实战经验分享:探索应用案例(mongodb应用实例)
- Mongodb启动失败?别慌,这些方法能够帮你解决问题!(mongodb启动失败)
- 在命令行中连接MongoDB:一步一步学习(命令行连接mongodb)
- 学习C,把SSH和MySQL整合在一起(c# ssh mysql)
- c#数组详解
- c#中常用的js语句
- c#解决IIS写Excel的权限问题
- c#常量和字段
- C#读取XML中元素和属性值的实现代码
- C#Dynamic之:ExpandoObject,DynamicObject,DynamicMetaOb的应用(上)
- wordpptexcel文档转换成pdf的C#实现代码
- c#Base64编码和图片的互相转换代码
- MongoDB入门教程之C#驱动操作实例