mongoDB C# 驱动快速入门

简介

本文仅仅让你通过使用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);
        }
    }
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值