设为首页 收藏本站
查看: 681|回复: 0

[经验分享] mongodb学习(翻译1)

[复制链接]

尚未签到

发表于 2015-7-6 06:56:56 | 显示全部楼层 |阅读模式
  学习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\CSharpDriver1.x

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


添加dll引用

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



  • MongoDB.Bson.dll
  • 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方式:



  • 使用 BsonDocument 对象
  • 使用自定义的实体对象

如果数据很难或者很散很难定义成相关实体,你可以通过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("entities");
  

插入文档对象

插入一个实体对象:




var entity = new Entity { Name = "Tom" };
collection.Insert(entity);
var id = entity.Id; // insert时候会对id进行赋值
  

查询文档对象

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




var query = Query.EQ(e => e.Id, id);
var entity = collection.FindOne(query);
  
Query.EQ 使用Query泛型类创建query对象,lambda表达式e=>e.Id 指向到我们集合中定义的字段

说明:

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

其他查询操作

包括: GT, 大于

GTE,大于等于

In, LT, LTE, Near, NE, And, Or还有一些其他的


保存文档对象

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




  entity.Name = "Dick";
collection.Save(entity);
  

更新文档对象

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




var query = Query.EQ(e => e.Id, id);
var update = Update.Set(e => e.Name, "Harry"); //更新

collection.Update(query, update);
  
通过update方法方便的进行更新操作


移除文档对象

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




var query = Query.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("entities");
var entity = new Entity { Name = "Tom" };
collection.Insert(entity);
var id = entity.Id;

var query = Query.EQ(e => e.Id, id);
entity = collection.FindOne(query);
entity.Name = "Dick";
collection.Save(entity);
var update = Update.Set(e => e.Name, "Harry");
collection.Update(query, update);
collection.Remove(query);
}
}
}
  



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-83514-1-1.html 上篇帖子: MongoDB的timezone问题 下篇帖子: MongoDB实战经验分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表