zoukankan      html  css  js  c++  java
  • (转)mongodb学习(翻译1)

    原文地址: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)MongoDBCSharp 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);
    
            }
        }
    }
  • 相关阅读:
    移动Web框架:jQuery Mobile VS Sencha Touch
    2011最具争议性文章:中国网页设计为什么这么烂?
    如何学习嵌入式linux[转]
    嵌入式linux,老手给新手的建议
    开发菜鸟应该知道的十件事
    C#中二进制、八进制、十六进制和十进制之间的相互转化问题
    使用splitter控件 将界面分成可以调整宽度的三个部分
    Mutex 类
    Java 发邮件
    Java Servlet介绍 2
  • 原文地址:https://www.cnblogs.com/fcsh820/p/3319409.html
Copyright © 2011-2022 走看看