前言
上一篇文章《MongoDB系列(一):简介及安装》已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯。再次强调一下,我使用的MongoDB版本是2.6,因为2.6是我最熟悉的版本,而且我使用的GUI工具Robomongo目前还不支持3.0版本。
添加官方驱动
官方驱动可以从Nuget上获取,但是这里我们不使用最新的驱动,而是使用1.9.2这个版本,个人认为该版本对MongoDB2.6的支持最好,而且目前的下载量也是最多。驱动地址:https://www.nuget.org/packages/mongocsharpdriver/1.9.2。因此,需要在程序包管理器中获取Nuget。
打开“程序包管理器中”
输入指令Install-Package mongocsharpdriver -Version 1.9.2,下载添加驱动
连接字符串
mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]
内容 |
描述 |
mongodb:// |
是连接字串必须的前缀字串 |
username:password@ |
可选项,连接到数据库后会尝试验证登陆 |
host1 |
必须的指定至少一个host |
:portX |
可选项,默认连接到27017 |
/database |
如果指定username:password@,连接并验证登陆指定数据库。若不指定,默认打开admin数据库。 |
?options |
是连接选项。如果不使用/database,则前面需要加上/。所有连接选项都是键值对name=value,键值对之间通过&或;(分号)隔开 |
C#驱动提供的常用API
方法 |
描述 |
InsertBatch |
批量插入 |
Insert |
单条插入 |
FindOneById |
按Id查询 |
Save |
保存,如果库中有记录则更新,否则做插入,按Id匹配 |
Remove |
删除指定文档 |
AsQueryable |
返回IQueryable<T>对象 |
Update |
更新一个或多个文档 |
RemoveAll |
删除所有记录 |
… |
其它 |
代码说明
抽象实体类Entity
public abstract class EntityWithTypedId<TId> { public TId Id { get; set; } } public abstract class Entity : EntityWithTypedId<ObjectId> { }
MongoDB要求每个集合都需要有一个Id,即使你定义的类中没有Id字段,存数据的时候也会生成一个Id,而且Id的类型默认是使用ObjectId,当然也可以使用其他简单类型作为Id,如int。
核心代码封装DbContext
public class DbContext { private readonly MongoDatabase _db; public DbContext() { var client = new MongoClient("mongodb://localhost:27017"); var server = client.GetServer(); _db = server.GetDatabase("Temp"); } public MongoCollection<T> Collection<T>() where T : Entity { var collectionName = InferCollectionNameFrom<T>(); return _db.GetCollection<T>(collectionName); } private static string InferCollectionNameFrom<T>() { var type = typeof(T); return type.Name; } }
1. 通过连接字符串与数据库建立连接。
2. 获取需要操作的Database,这里是Temp。
3. 类名与Collection名一致,作为映射的约束。如果库中没有这个Collection,则创建该Collection,如果有,则操作该Collection。
定义一个股票类Stock,包含股票代码,股票名称,股票价格等简单类型字段以及股票粉丝复杂字段: