您的位置:首页 > 数据库 > Mongodb

mongoDB C# 驱动快速入门

2013-01-04 14:59 543 查看


简介

本文仅仅让你通过使用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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: