当前位置:数据库 > mongodb >>

mongoDB C# 驱动快速入门

添加 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);
        }
    }
}
补充:软件开发 , C# ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,