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);
    
            }
        }
    }
  • 相关阅读:
    how to uninstall devkit
    asp.net中bin目录下的 dll.refresh文件
    查找2个分支的共同父节点
    Three ways to do WCF instance management
    WCF Concurrency (Single, Multiple, and Reentrant) and Throttling
    检查string是否为double
    How to hide TabPage from TabControl
    获取当前系统中的时区
    git svn cygwin_exception
    lodoop打印控制具体解释
  • 原文地址:https://www.cnblogs.com/fcsh820/p/3319409.html
Copyright © 2011-2022 走看看