原文地址:http://www.cnblogs.com/Johnzhang/archive/2013/09/10/3313582.html

学习mongodb,试着翻译写,英语能力有限,希望大家指正,不顺畅地方大家担待,会后续翻译后面内容;

开始认识C#驱动(官方)

简介

本介绍提供了足够的信息,让你开始使用C#的驱动程序。起步之后,你可以参考文档的其余部分,了解更多信息。

下载C#驱动

最简单的下载C#官方驱动的方式是通过Nuget,(当前version:1.8.2)

你也可以在此地址下载该驱动

https://github.com/mongodb/mongo-csharp-driver/releases

如果是下载的是.zip文件,只要简单的解压并放在任何一个位置即可,如果下载的是.msi文件,点击即可运行安装,该程序会把所有dlls安装到C:\ProgramFiles (x86)\MongoDB\CSharp Driver 1.x

具体的路径根据你的系统而定

添加dll引用

右键点击添加引用找到相应的dll添加到解决方案中,你需要添加以下dll的引用:

  1. MongoDB.Bson.dll
  2. MongoDB.Driver.dll

当然,你可以直接用NuGet直接添加C#驱动dll到你的解决方案中。

引入命名空间

至少你要引入以下命名空间

using MongoDB.Bson;
using MongoDB.Driver;

另外,你可能会经常引入下面一个或者多个命名空间

1 using MongoDB.Driver.Builders;
2 using MongoDB.Driver.GridFS;
3 using MongoDB.Driver.Linq;

在其他特殊的一些情况下,会要引入另外的一些命名空间

获取Client Object对象引用

最简单的获取client object引用的方式是通过国一个连接字符串

1 String connectionString = "mongodb://localhost";
2 MongoClient client = new MongoClient(connectionString);

你可以存储client object 在一个全局变量中,MongoClient是线程安全的。

获取Server Object对象引用

Server object对象通过client object对象来创建::

1 MongoServer server = client.GetServer();

获取数据库对象引用

通过server object对象获取数据库对象引用

1 var database = server.GetDatabase("test"); // test为adb名称

如果你使用的不值一个数据库,你可以通过GetDatabase获取任何一个数据库对象的引用

BsonDocument 对象模式vs自定义实体模式

有两种让你可以创建document方式:

  1. 使用 BsonDocument 对象
  2. 使用自定义的实体对象

如果数据很难或者很散很难定义成相关实体,你可以通过BsonDocument来操作。

由于使用自定义类比较方便,这个教程中将要使用这种方式,C#驱动程序可以让使用你提供了一下内容的自定义类

1.具有无参的构造函数

2.定义了可读写的属性

这些要求和.NET’s XmlSerializer.所要求的一样

另外,如果你的自定义类作为根文档,它必须包含一个id字段或者一个id属性,(但是需要时你可以重写他),一般id类型为ObjectId但并未对其类型进行强制约束

请看下面类实体定义:

public class Entity
{
public ObjectId Id { get; set; } public string Name { get; set; } }

获取集合对象引用

你可以通过如下方式获取集合对象

// "entities" 为集合名称

var collection = database.GetCollection<Entity>("entities");

插入文档对象

插入一个实体对象:

var entity = new Entity { Name = "Tom" };

collection.Insert(entity);

var id = entity.Id; // insert时候会对id进行赋值

查询文档对象

在这个例子中假设知道id的值,我们将读取这个实体对象的值

var query = Query<Entity>.EQ(e => e.Id, id);

var entity = collection.FindOne(query);

Query<Entity>.EQ 使用Query泛型类创建query对象,lambda表达式e => e.Id 指向到我们集合中定义的字段

说明:

一般说来,数据库中字段是和自定义实体中字段完全一样的,但是id是一个例外,他会映射到数据库中_id字段

其他查询操作

包括: GT, 大于

GTE,大于等于

InLTLTENearNEAndOr还有一些其他的

保存文档对象

你可以像这样保存一个文档:

  entity.Name = "Dick";

  collection.Save(entity);

更新文档对象

保存的另一个方式就是更新,不同之处在于保存会发送整个对象到服务器,更新只会发送对象改变的部分,例如:

var query = Query<Entity>.EQ(e => e.Id, id);

var update = Update<Entity>.Set(e => e.Name, "Harry"); //更新

collection.Update(query, update);

通过update方法方便的进行更新操作

移除文档对象

你可以通过下面的方式移除文档对象

var query = Query<Entity>.EQ(e => e.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<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); }
}
}

(转)mongodb学习(翻译1)的更多相关文章

  1. MongoDB学习3

    MongoDB学习(翻译3)   支持的where字句(比较多,今天先写一部分) 本节介绍支持的where字句 正如前面提到的,不是所有的C#表达式都支持where子句.您可以以此文为指导,或者你可以 ...

  2. MongoDB学习2

    MongoDB学习(翻译2) C#驱动之LINQ教程 介绍 本教程涵盖了1.8发布版本对linq查询的支持. 开始本教程之前,你应该至少阅读下C#驱动教程关于C#驱动的介绍 快速开始 首先,添加下面命 ...

  3. MongoDB学习笔记二- Mongoose

    MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...

  4. MongoDB学习笔记系列

    回到占占推荐博客索引 该来的总会来的,Ef,Redis,MVC甚至Sqlserver都有了自己的系列,MongoDB没有理由不去整理一下,这个系列都是平时在项目开发时总结出来的,希望可以为各位一些帮助 ...

  5. MongoDB学习笔记—Linux下搭建MongoDB环境

    1.MongoDB简单说明 a MongoDB是由C++语言编写的一个基于分布式文件存储的开源数据库系统,它的目的在于为WEB应用提供可扩展的高性能数据存储解决方案. b MongoDB是一个介于关系 ...

  6. Mongodb学习笔记一(Mongodb环境配置)

    Mongodb学习 说明: MongoDB由databases组成,database由collections组成,collection由documents组成,document由fileds组成.Mo ...

  7. MongoDB学习记录

    一.操作符 "$lt" :"<""$lte" :"<=""$gt" :"> ...

  8. PHP操作MongoDB学习笔记

    <?php/*** PHP操作MongoDB学习笔记*///*************************//**   连接MongoDB数据库  **////*************** ...

  9. MongoDB学习:(二)MongoDB简单使用

    MongoDB学习:(二)MongoDB简单使用 MongoDB使用: 执行mongodb的操作之前,我们需要运行命令,来进入操作命令界面 >mongo 提示该错误,说明我们系统缺少一个补丁,该 ...

  10. MongoDB学习:(一)MongoDB安装

    MongoDB学习:(一)MongoDB安装 MongoDB介绍:     直接百科了: MongoDB安装: 1:下载安装: MongoDB安装:https://www.mongodb.com/do ...

随机推荐

  1. myeclipse按.自动提示方法

    第一步:菜单Window->Preferences->Java->Editor->Content Assist->Enable auto activation 选项要打勾 ...

  2. MongoDB高级查询用法大全 (转)

    http://www.cnblogs.com/t2xingzhe/p/3555268.html

  3. mysql复制(高可用架构方案的基础)

    mysql复制:把一个数据库实例上所有改变复制到另外一个数据库库服务器实例的过程特点:1.没有改变就无所谓复制 ;改变是复制的根本与数据源2.所有的改变:是指可以复制全部改变,也可以复制部分改变 可以 ...

  4. What’s that ALUA exactly?

    What’s that ALUA exactly? 29 September, 20098 Comments Of course by now we have all read the excelle ...

  5. java动态画圈圈。运用多线程,绘图

    总结:只是意外的收获吧.之前一篇是老师教的,一个点,从底层开始升起,到鼠标按下的地方开始画圈圈, 现在改变了一下,因为点上升的一个循环和画圈的循环是分开的 现在让点点自己跑,并且边跑边画圈.而且在fo ...

  6. Java中的intern变量的讲解

    一般我们变成很少使用到 intern这个方法,今天我就来解释一下这个方法是干什么的,做什么用的 首先请大家看一个例子: public static void main(String[] args) t ...

  7. Hadoop的HA机制

    前言:正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制 1. HA的运作机制 (1)hadoop-HA集群运作机制介绍 所谓HA,即高可用(7*24小时不中断服务) 实现高可用最关 ...

  8. krpano之背景音乐

    步骤: 1.添加音乐控制插件 <!-- START:音乐控制 --> <plugin name="soundinterface" url="%SWFPA ...

  9. springboot整合图像数据库Neo4j

    百度百科: Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中.它是一个嵌入式的.基于磁盘的.具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从 ...

  10. jenkins容器权限被拒绝

    问题,我们从官网上面pull下jenkins后,如果直接运行容器的没问题 docker run -d -p 8080:8080 -v jenkins:latest 不过我们可能需要映射下容器内部的地址 ...