zoukankan      html  css  js  c++  java
  • MongoDB学习之--增删改查(2)

    昨天简单介绍了官方驱动操作MongoDB进行增删查操作的,今天继续介绍更新操作.....

    方法简介

    官方驱动中更新操作使用collection的Update方法,有泛型和非泛型两个版本:

    其签名如下(列出了两个简单并常用的的重载,还有几个):

    public virtual WriteConcernResult Update(IMongoQuery query, IMongoUpdate update);
    public virtual WriteConcernResult Update(IMongoQuery query, IMongoUpdate update, UpdateFlags flags)

    首先分析一下方法参数:

    IMongoQuery 和 IMongoUpdate只是两个约束接口,实现了该接口的类均可作为该方法参数,对于前者,在这里我们主要通过Query类的静态方法和 QueryBuilder<T>这个泛型类的实例方法来构造
    IMongoQuery ;对于IMongoUpdate我们主要通过Update类以及其泛型版本的静态方法来构造,其静态方法返回值类型为UpdateBuilder,该类恰好实现了IMongoUpdate接口。

    分析类比调用

    基础实体类:

     1 /// <summary>
     2     /// 学生实体类
     3     /// </summary>
     4     public class Student
     5     {
     6         public ObjectId Id { get; set; }
     7         /// <summary>
     8         /// 姓名
     9         /// </summary>
    10         public string Name { get; set; }
    11         /// <summary>
    12         /// 年龄
    13         /// </summary>
    14         public Int32 Age { get; set; }
    15         /// <summary>
    16         /// 地址
    17         /// </summary>
    18         public Address Address { get; set; }
    19 
    20     }
    21     /// <summary>
    22     /// 地址
    23     /// </summary>
    24     public class Address
    25     {
    26         /// <summary>
    27         /// 城市
    28         /// </summary>
    29         public String City { get; set; }
    30         /// <summary>
    31         /// 邮编
    32         /// </summary>
    33         public String PostCode { get; set; }
    34     }
    View Code

    在我们关系数据库中,比如oracle或者sqlserver中按照实体类设计,表结构应该是两个,学生信息表以及地址表,但是我们假设存储在一个表中方便我们类比;我要更新数据库中信息,通常关系数据库中我们是这么做的:

    update tableName set  a='a' and  b='b'  where  c='c'

    在mongodb中我们就是向下面这样做:

    use dbName;
    
    db.CollectionName.update({query:"query"},{"$set":{update:"update"}})

    现在看我们通过C#驱动怎么构造这样一种结构:关于IMongoQuery的构造上一篇我也介绍过一些,这里只谈下上次没说的部分 ,

    首先构造IMongoQuery:

    a.通过QueryBuilder<T>构造

    var t1 = queryBuilder.EQ<String>(t => t.Address.City, "北京");//where city="北京"

    b.通过Query构造

     var t2 = Query.EQ("Address.City", "北京");//where city="北京"
     var t3 = Query<Student>.EQ<String>(t => t.Address.City, "北京");//where city="北京"

    其次,构造IMongoUpdate

    var u1 = Update<Student>.Set<String>(t => t.Address.City, "上海");//set city="上海"
    var u2 = Update.Set("Address.City", "上海");//set city="上海"

    这样可以往下调用update方法了

    collection.Update(t1, u2);//只更新满足t1的一个文档对象
    collection.Update(t1, u2, UpdateFlags.Multi);//更新满足t1的所有文档对象

    今天就到这里了,另:Update类还有其他用于设置的方法不单set方法,这里有兴趣的可以看下api,加深下了解。。。

  • 相关阅读:
    实验吧之损坏的U盘
    kali linux中的yum、rpm常见的问题
    常用的搜索引擎使用技巧
    Host Only、NAT和Bridge三种网络连接
    Binwalk的安装和使用
    虚拟机增强工具的安装
    下载带有kali linux系统的VMware如何打开虚拟机?
    安装Linux虚拟系统
    虚拟机之种种问题
    python 运行时报错误SyntaxError: Non-ASCII character 'xe5' in file 1.py on line 2
  • 原文地址:https://www.cnblogs.com/Johnzhang/p/3315108.html
Copyright © 2011-2022 走看看