简介
本文仅仅让你通过使用C#驱动对mongoDB能够上手。然后你可以参考其余的文档获取更多信息。
下载 C# 驱动
可以到以下链接下载C#驱动:
http://github.com/mongodb/mongo-csharp-driver/downloads
如果下载的是 .zip 文件,只需解压后放到任意地方。
如果下载的是 .msi 文件,双击运行安装程序,它将会把 C# 驱动的 DLL 安装在 "C:\Program Files (x86)\MongoDB\CSharp Driver 1.x" 目录下 (实际路径根据你的系统而定).
添加 C# 驱动 DLL引用
在Visual Studion解决方案资源管理器的“引用”目录上右键,选择“添加引用……”。找到C#驱动DLL所在目录,添加以下DLL引用:
1. MongoDB.Bson.dll
2. MongoDB.Driver.dll
还可以用NuGet程序包管理器来添加 C# 驱动包到你的解决方案中。
添加必需的using语句
你至少需要以下using语句:
using MongoDB.Bson;
using MongoDB.Driver;
另外,通常还会用到以下一个或多个using语句:
using MongoDB.Driver.Builders;
using MongoDB.Driver.GridFS;
using MongoDB.Driver.Linq;
还有一些命名空间只在特殊场合用的上。
获取客户端对象引用
获取一个客户端对象引用的最简单方法就是使用连接字符串了:
var connectionString = "mongodb://localhost";
var client = new MongoClient(connectionString);
如果想在全局变量中存储该客户端对象,没问题,MongoClient是线程安全的。
获取服务端对象引用
要从客户端对象获取服务端对象引用,这么写:
var server = client.GetServer();
获取数据库对象引用
要从服务端对象获取数据库对象引用,这么写:
var database = server.GetDatabase("test"); // "test" 是数据库名称
如果要使用多于一个的数据库,为每一个你想使用的数据库再次调用 GetDatabase 即可。
决定是使用 BsonDocument 对象还是你自己的类。
有两种使用集合的方法:
1. 使用 BsonDocument 对象模型
2. 使用自己的实体类
如果数据格式很随意,很难或不可能定义成实体类的话,那就使用 BsonDocument 对象模型。
由于使用自己的实体类更容易得多,所以本文将假定你采用的是这种方法。 你的实体类必须有以下要求:
1. 具有无参构造函数
2. 对于要存储在数据库里的数据,需定义公共的读/写字段或属性
这些要求与.NET的XmlSerializer对类的要求本质上是一样的。
另外,如果实体类将作为根级文档,那它必须包含一个Id字段或属性(通常命名为“Id”,即使有需要你可以重写它)。通常Id的类型为ObjectId。
获取集合对象引用
为了演示,假设你用的是名为Entity的实体类。要获取包含Entity文档的集合引用,可以像这样写:
var collection = database.GetCollection<Entity>("entities"); // "entities" 是集合的名称
插入一个文档
插入文档很简单:
var entity = new Entity { Name = "Tom" };
collection.Insert(entity);
var id = entity.Id; // 如有必要,Insert 会设置Id的值(这个例子就是如此)
查找已有文档
在本例中,假设我们已经知道Id的值,去找它对应的Entity:
var query = Query.EQ("_id", id);
var entity = collection.FindOne(query);
Query.EQ 是用 Query builder 类来帮你创建查询。 "_id" 是存在数据库中的字段名(通常数据库中的字段名跟你实体类 的字段或属性名是一样的,但Id是一个例外,它映射为数据库中的”_id“)。
其它的查询操作包括: GT, GTE, In, LT, LTE, Near, NE, And, Or (和一些其它更专用的).
保存文档
可以像这样保存一个现有文档的修改:
entity.Name = "Dick";
collection.Save(entity);
更改现有的文档
Update是另一种Save。不同在于 Save 将整个文档回传给服务端,但Update只发送更改的部分。例如:
var query = Query.EQ("_id", id);
var update = Update.Set("Name", "Harry"); // 更新修饰符
collection.Update(query, update);
本例使用 Update builder 来简单地创建更新修饰符。
移除已有的文档
要从集合中移除已有的文档,这么写:
var query = Query.EQ("_id", id);
collection.Remove(query);
不需要调用 Connect 或者 Disconnect
C# 驱动有一个连接池来高效地使用与服务端的连接。不需要调用 Connect 或者 Disconnect;只需让驱动来管理连接即可 (调用 Connect 没什么害处,但调用 Disconnect 就比较糟糕了,因为它会关闭连接池里所有的连接)。
完整的例子程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
namespace ConsoleApplication1
{
public class Entity
{
public ObjectId Id { get; set; }
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
var connectionString = "mongodb://localhost";
var client = new MongoClient(connectionString);
var server = client.GetServer();
var database = server.GetDatabase("test");
var collection = database.GetCollection<Entity>("entities");
var entity = new Entity { Name = "Tom" };
collection.Insert(entity);
var id = entity.Id;
var query = Query.EQ("_id", id);
entity = collection.FindOne(query);
entity.Name = "Dick";
collection.Save(entity);
var update = Update.Set("Name", "Harry");
collection.Update(query, update);
collection.Remove(query);
}
}
}