Getting Started with the C# Driver
1.下载
如果下载的.zip文件,只需要解压即可。
如果安装的.msi文件,它会将C#驱动DLL放在C:\Program Files (x86)\MongoDB\CSharp Driver xxx的位置。
2.将C#驱动DLL添加引用
你也可以使用NuGet包,给项目安装驱动。
3.添加using声明
using MongoDB.Bson;
using MongoDB.Driver; using MongoDB.Driver.Builders;
using MongoDB.Driver.GridFS;
using MongoDB.Driver.Linq;
4.获取一个Client对象的引用
使用一个连接字符串,是活的一个Client对象的简单方式。
var connectionString = "mongodb://localhost";
var client = new MongoClient(connectionString);
如果你要在全局变量中存储Client对象,你可以使用MongoClient,它是线程安安全。
5.获取一个Server对象的引用
var server = client.GetServer();
6.获取一个Database对象的引用
var database = server.GetDatabase("test"); // "test" is the name of the database
如果你使用多个Database,可以为每个Database调用一次GetDatabase。
7.BsonDocument Object Model vs. Your Own Domain Classes
你有两种使用collections的方式
- 使用BsonDocument object model
- 使用你的own domain classes
当你使用的数据,难以或不可能为它定义domain classes时,你应该使用BsonDocument object model。
因为它和你的own domain classes一起工作是如此简单。C#驱动可以和你的domain classes一起工作,为他们提供:
- 有一个没商量的构造器
- 为你要存储在数据库中的字段,定义公共读/写属性
这些装备,本质上和.NET的XmlSerializer一样。
另外,如果你的domain class 要用于作为root document,它必须包含一个Id字段或属性(一般叫做Id,你也可以覆盖它)。一般Id会是ObjectId类型,但这里没有强制该成员的类型。
考虑遵循下面的类定义:
public class Entity
{
public ObjectId Id { get; set; } public string Name { get; set; }
}
8.获取一个Collection Object的引用
像这样,你会得到一个包含Entity文档的集合:
// "entities" is the name of the collection
var collection = database.GetCollection<Entity>("entities");
9.Insert a Document
Insert一个Entity:
var entity = new Entity { Name = "Tom" };
collection.Insert(entity);
var id = entity.Id; // Insert will set the Id if necessary (as it was in this example)
10.Find一个现存的Document
假设我们已知Id的值,会读回一个Entity:
var query = Query<Entity>.EQ(e => e.Id, id);
var entity = collection.FindOne(query);
Query<Entity>.EQ使用Query<T>构建类,来构建查询。Lambda表达式e=>e.Id,翻译成_id。这是该字段存储在数据库中的名字。
注意:一般,字段在数据库中的名字,与它在domain class中的字段或属性名一样。但Id,是一个例外,它与数据库中的_id映射。
其他查询操作,包括:GT,GTE,In,LT,LTE,Near,NE,And,Or(和其他很特殊的)。
11.Save a Document
你可以像下面这样,保存对现有document的改变。
entity.Name = "Dick";
collection.Save(entity);
12.更新一个现有Document
另一种Save,是Update。不同之处是,Save将实体文档发回服务器,而Update仅仅发送改变。例如:
var query = Query<Entity>.EQ(e => e.Id, id);
var update = Update<Entity>.Set(e => e.Name, "Harry");
// update modifiers
collection.Update(query, update);
该例子使用Update<T>构建器,轻松构建update修改。
13.Remove一个现存Document
要从集合中移除一个现存document,你可以这么写:
var query = Query<Entity>.EQ(e => e.Id, id);
collection.Remove(query);
14.你不需要调用Connect或Disconnect
C#驱动有一个connection pool,用来高效地连接服务器。这样就不用调用Connect或Disconnect。就让驱动来关心连接吧(调用Connect是无害的,但调用Disconnect是非常糟糕。因为他关闭所有connection pool中的链接)。
15.完整的示例程序
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<Entity>.EQ(e => e.Id, id);
entity = collection.FindOne(query); entity.Name = "Dick";
collection.Save(entity); var update = Update<Entity>.Set(e => e.Name, "Harry");
collection.Update(query, update); collection.Remove(query);
}
}
}
Getting Started with the C# Driver的更多相关文章
- 深入linux kernel内核配置选项
============================================================================== 深入linux kernel内核配置选项 ...
- MongoDB Java Driver操作指南
MongoDB为Java提供了非常丰富的API操作,相比关系型数据库,这种NoSQL本身的数据也有点面向对象的意思,所以对于Java来说,Mongo的数据结构更加友好. MongoDB在今年做了一次重 ...
- c#操作MangoDB 之MangoDB CSharp Driver驱动详解
序言 MangoDB CSharp Driver是c#操作mongodb的官方驱动. 官方Api文档:http://api.mongodb.org/csharp/2.2/html/R_Project_ ...
- Java JDBC Thin Driver 连接 Oracle 三种方法说明(转载)
一.JDBC 连接Oracle 说明 JDBC 的应用连接Oracle 遇到问题,错误如下: ORA-12505,TNS:listener does not currently know of SID ...
- 设备模型(device-model)之平台总线(bus),驱动(driver),设备(device)
关于关于驱动设备模型相关概念请参考<Linux Device Drivers>等相关书籍,和内核源码目录...\Documentation\driver-model 简单来说总线(bus) ...
- AM335x tscadc platform driver 相关代码跟踪
TI AM335x ti am335x_tsc.c 代码跟踪 在kernel 首层目录: 先运行make ARCH=arm tags 这个作用是建立tags文件,只含有arm架构的,利用ctag即可进 ...
- selenium web driver 实现截图功能
在验证某些关键步骤时,需要截个图来记录一下当时的情况 Webdriver截图时,需要引入 import java.io.File; import java.io.IOException; import ...
- selenium web driver 使用JS修改input属性
selenium获取input时候,发现type=”hidden” 的input无法修改value,经牛人指点,可以使用js修改 首先html源文件如下,设置为text .hidden.submit ...
- 转载:安装ie driver和chrome driver
很多同学在使用webdriver的时候总是忘了安装ie driver和chrome driver, 因此在这里简单介绍一下这2个driver的安装方式. IE driver 在新版本的webdrive ...
- U-Boot Driver Model领域模型设计
需求分析 在2014年以前,uboot没有一种类似于linux kernel的设备驱动模型,随着uboot支持的设备越来越多,其一直受到如下问题困扰: 设备初始化流程都独立实现,而且为了集成到系统,需 ...
随机推荐
- Android 关于ExpandableListView控件setOnChildClickListener无效问题
其实很简单,在适配器里面重写isChildSelectable的时候返回值切记为true,这样才能使得二级监听有响应. 其次注意继承的是BaseExpandableListAdapter
- linux 文件目录
- linux截取指定字符shell cut awk
[root@mylab demo]# echo $var939f61b61978a589d9873e9ea7fdf201b213dec2[root@mylab demo]# echo ${var:0: ...
- echarts html传参+js请求+ashx服务 代码方式
html 头传参方式 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <hea ...
- C# --System.Timers.Timer 定时方法
注意Start() 注意要等Interval 时间间隔 static void Main(string[] args) { System.Timers.Timer t = new System.Tim ...
- 设计视图不能用于 x64 和 ARM 目标平台
设计视图不能用于 x64 和 ARM 目标平台
- Azure Remote Desktop: "An error occurred while loading from file *.rdp"
Tonight I deployed a new cloud service where I needed remote desktop to check on some things. After ...
- The Struts dispatcher cannot be found. This is usually caused by using Strut
The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the assoc ...
- Effective C++ 1.让自己习惯C++
//条款01:视C++为一个语言联邦 // 1:C++主要包含的语言为: // A:C.说到底C++仍然以C为基础.区块(blocks).语句.预处理器.内置数据类型.数组.指针等均来自于C.许多时候 ...
- oracle触发器书写方法
CREATE SEQUENCE 序列名[INCREMENT BY n] --每次加几[START WITH n] --序列从几开始[{MAXVALUE/ MINVALUE n|NOMAXVALUE}] ...