MongoDB--CSharp Driver Quickstart .
介绍
本文的目的是让你对如何使用Mongodb的C#驱动有一个简单的了解,当你阅读完本文你就可以参考其他文章以了解更多信息。
下载C#驱动
你可以在这里下载需要的驱动。网站提供压缩包(zip)和安装包(msi)两种格式的驱动,下载完成后你可以将他解压或安装到你需要的目录。
添加C#驱动
在你的visual studio项目右击项目选择"Add Reference..."将如下两个dll添加到项目的引用中.
1. MongoDB.Bson.dll
2. MongoDB.Driver.dll
添加需要的命名空间
你的项目要使用MongoDB,至少需要下面两个命名空间
- using MongoDB.Bson;
- using MongoDB.Driver;
using MongoDB.Bson;
using MongoDB.Driver;
另外你也许需要下面这些命名空间
- using MongoDB.Driver.Builders;
- using MongoDB.Driver.GridFS;
- using MongoDB.Driver.Linq;
using MongoDB.Driver.Builders;
using MongoDB.Driver.GridFS;
using MongoDB.Driver.Linq;
获取服务器对象
获取服务器的连接对象非常简单
- var connectionString = "mongodb://localhost/?safe=true";
- var server = MongoServer.Create(connectionString);
var connectionString = "mongodb://localhost/?safe=true";
var server = MongoServer.Create(connectionString);
你应该在你的连接字符串中始终加上"safe=true"
或许你想用一个全局变量来保存你的服务器对象,其实当你使用相同的连接字符调用MongoServer.Create方法时返回的服务器对象是相同的对象引用,因此你无需采用全局变量来保存你的服务器对象在需要的时候调用MongoServer.Create方法即可。
获取数据库对象
获取数据库对象的方法如下:
- var database = server.GetDatabase("test"); // "test" is the name of the database
var database = server.GetDatabase("test"); // "test" is the name of the database
如果你需使用更多的数据库只需要多次调用server.GetDatabase()方法即可。
如何确定使用BsonDocument对象还是自定义类对象
你有两种方式来操作一个集合
1.使用BsonDocument对象。
2.使用自定义的类对象。
当你要处理的数据格式比较灵活难以用自定义的类来描述时你应该考虑采用BsonDocument来操作集合.
采用自定义的类对象可以让其他开发人员快速了解你的意图,自定义的类需要满足如下两个条件:
1.需要一个没有参数的构造函数。
2.定义公开的可读写的字段或属性来操作数据库中表相关的字段。
另外如果你要用自定义类操作根文档,你的类还必须包含一个ID属性。通常情况下id的类型为ObjectId。
获取集合对象
为了更好理解这个小节,我们采用一个名叫Entity的自定义类,你可以使用如下方式获取包含Entity文档的集合。
- var collection = database.GetCollection<Entity>("entities"); // "entities" is the name of the collection
var collection = database.GetCollection<Entity>("entities"); // "entities" is the name of the collection
插入一个文档
插入一个文档的方式非常简单
- 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)
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)
查找文档
在这个列子中我将根据指定的id来获取相应的文档信息。
- var query = Query.EQ("_id", id);
- var entity = collection.FindOne(query);
var query = Query.EQ("_id", id);
var entity = collection.FindOne(query);
保存文档
你可以采用如下方式来保存一个已更改的文档
- entity.Name = "Dick";
- collection.Save(entity);
entity.Name = "Dick";
collection.Save(entity);
更新已存在的文档
另一种保存的方式就是更新。两种方法的不同点是Save()方法是将整个文档数据发回给服务器,而update()只是将更改的信息返回给服务器。
- var query = Query.EQ("_id", id);
- var update = Update.Set("Name", "Harry"); // update modifiers
- collection.Update(query, update);
var query = Query.EQ("_id", id);
var update = Update.Set("Name", "Harry"); // update modifiers
collection.Update(query, update);
删除已存在的文档
要删除集合中的一条文档信息写法如下:
- var query = Query.EQ("_id", id);
- collection.Remove(query);
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/?safe=true";
- var server = MongoServer.Create(connectionString);
- 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);
- }
- }
- }
MongoDB--CSharp Driver Quickstart .的更多相关文章
- c#操作MangoDB 之MangoDB CSharp Driver驱动详解
序言 MangoDB CSharp Driver是c#操作mongodb的官方驱动. 官方Api文档:http://api.mongodb.org/csharp/2.2/html/R_Project_ ...
- mongodb .net driver
1.介绍 The official MongoDB .NET Driver provides asynchronous interaction with MongoDB. Powering the d ...
- MongoDB Java Driver操作指南
MongoDB为Java提供了非常丰富的API操作,相比关系型数据库,这种NoSQL本身的数据也有点面向对象的意思,所以对于Java来说,Mongo的数据结构更加友好. MongoDB在今年做了一次重 ...
- MongoDB C Driver使用教程
MongoDB C Driver使用教程 转载请注明出处http://www.cnblogs.com/oloroso/ 本指南提供简介 MongoDB C 驱动程序. 在 C API 的详细信息,请参 ...
- windows平台下安装、编译、使用mongodb C++ driver
本博客将记录在Win8.1 ,VS2013环境下编译.配置mongodb C++ driver的流程. 1.下载预备 下载Boost:http://sourceforge.net/projects/b ...
- Ignoring Extra Elements in mongoDB C# Driver
MongoDB删除字段后会报错: Element ... does not match any field or property of class Customer. 需要在实体类增加 [BsonI ...
- Mongodb Java Driver 参数配置解析
要正确使用Mongodb Java Driver,MongoClientOptions参数配置对数据库访问的并发性能影响极大. connectionsPerHost:与目标数据库能够建立的最大conn ...
- mongodb c++ driver(2.53)windows编译
编译环境: (1) 下载python2.7, 使用x86_32位,因为scons只有32位安装包可用: (2) 下载scons2.3.0,The current production release ...
- MongoDB C Driver and APIinstances linux MongoDB安装配置
<一,linux平台MongoDB安装配置>在这我们使用的Centos6 yum部署的,你想搞编译,自个干!
随机推荐
- 深度学习 循环神经网络 LSTM 示例
最近在网上找到了一个使用LSTM 网络解决 世界银行中各国 GDP预测的一个问题,感觉比较实用,毕竟这是找到的唯一一个可以正确运行的程序. #encoding:UTF-8 import pandas ...
- java重写toString方法
在输出对象属性时,重写toString按照你希望的输出形式重写 object类里的toString只是把字符串的直接打印,数字的要转化成字符再打印,而对象,则直接打印该对象的hash码.所以当你要想按 ...
- LG4777 【模板】扩展中国剩余定理(EXCRT)
题意 题目描述 给定\(n\)组非负整数\(a_i, b_i\),求解关于\(x\)的方程组 \[\begin{cases} x \equiv b_1\ ({\rm mod}\ a_1) \\ x\e ...
- streamsets http client && json parse && local fs 使用
streamsets 包含了丰富的组件,origin processer destination 测试例子为集成了http client 以及json 处理 启动服务 使用docker 创建pipel ...
- jenkins需要安装的插件
jenkins plugin 需要安装的插件: •发布插件 Deploy to container Plugin 必须 •Maven插件 Maven Integration plugin必须 •git ...
- zipkin对于dubbo的支持
对于Web端: 1. 需要在applicationContext的头部添加中添加prefix引用: xmlns:dubbo="http://code.alibabatech.com/sche ...
- zedgraph中禁用鼠标滚轮变焦(禁止画图区域随鼠标滚动改变XY轴,定位)(转)
禁用鼠标滚轮变焦的zedgraph功能 如果zgc是你ZedGraphControl实例,请使用: zgc.ZoomButtons = MouseButtons.None; zgc.ZoomButto ...
- bzoj3191卡牌游戏
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3191 原本想模拟过程,从t个人推到1个人: 但是怎么转移呢?想状压,可是50位压不到角标里. ...
- erlang otp中的socket参数设置
抄自http://www.zackzod.me/2012/10/24/socket-options-in-erlang-otp.html Erlang的inet模块里提供了对Socket进行一系列参数 ...
- 关于Fragment框架,说的够清晰了。。。
Android4.0-Fragment框架实现方式剖析(一) 分类: Android UI 2012-09-19 18:59 14880人阅读 评论(8) 收藏 举报 android 目录(?)[ ...