zoukankan      html  css  js  c++  java
  • MongoDB在.NetCore中的使用

    概述

    MongoDB是一种面向文档的数据库管理系统。MongoDB中的记录是一个文档,它是由字段和值对组成的数据结构。MongoDB文档类似于JSON对象。字段的值可以包括其他文档,数组和文档数组。

    使用文档的优点:

    • 文档(即对象)对应于许多编程语言中的内置数据类型。
    • 嵌入式文档和数组减少了对昂贵连接的需求。
    • 动态模式支持流畅的多态性。

    MongoDB属于NoSQL。NoSQL指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
    NoSQL用于超大规模数据的存储。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

    NoSQL的优点:

    • 高可扩展性
    • 分布式计算
    • 低成本
    • 架构的灵活性,半结构化数据
    • 没有复杂的关系

    NoSQL的缺点:

    • 没有标准化
    • 有限的查询功能(到目前为止)
    • 最终一致是不直观的程序

    使用

    安装配置MongoDB服务

    略(请自行查阅)
    注意:MongoDB没有默认用户,请使用如下命令创建用户并授权

    //进入自带admin库
    > use admin
    //创建用户并设置职责
    > db.createUser(
       {
         user: "admin",
         pwd: "123456",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
       }
      )
    

    项目中安装驱动

    安装名为MongoDB.Driver的Nuget包

    创建数据库连接

    // 使用连接字符串连接
    var client = new MongoClient("mongodb://localhost:27017");
    

    获取数据库与集合

    //获取database
    var mydb = client.GetDatabase("myDb");
    //获取collection
    var collection = mydb.GetCollection<BsonDocument>("userinfos");
    

    添加数据

    单条插入InsertOne

    //待添加的document
    var doc = new BsonDocument{
        { "_id",1 },
        { "name", "张三" },
        { "age", 24 },
        { "ename", new BsonDocument
            {
                { "firstname", "san" },
                { "lastname", "zhang" }
            }
        }
    };
    //InsertOne()添加单条docment
    collection.InsertOne(doc);
    

    批量插入InsertMany

    查询

    Find和Filter

    //filter用于过滤,如查询name = 吴九的第一条记录
    var filter = Builders<BsonDocument>.Filter;
    //Find(filter)进行查询
    var doc = collection.Find(filter.Eq("name", "张三")).FirstOrDefault();
    

    filter提供多种方法,常见的有Eq()、Lt()、Gt()以及无条件Empty

    AND、OR和Exists

    //查询25<年龄<28的记录
    var docs = collection.Find(filter.Gt("age", 22) & filter.Lt("age", 28)).ToList();
    //查询年龄小于22或年龄大于28的记录
    var docs = collection.Find(filter.Lt("age", 25) | filter.Gt("age", 28)).ToList();
    //查询存在address字段的记录
    var docs = collection.Find(filter.Exists("address")).ToList();
    

    Sort和Projection

    //年龄倒序排列
    var docs = collection.Find(filter.Empty).Sort(sort.Descending("age")).ToList();
    //查询指定字段
    var docs = collection.Find(filter.Empty).Project(project.Include("name")//包含name
                                                    .Include("age")//包含age
                                                    .Exclude("_id")//不包含_id
                                                    ).ToList();
    

    修改和删除

    单条修改UpdateOne

    //将张三的年龄改成18
    collection.UpdateOne(filter.Eq("name", "张三"), update.Set("age", 18));
    

    批量修改UpdateMany

    //将所有人的年龄改成18
    collection.UpdateMany(filter.Empty, update.Set("age", 18));
    

    单条删除DeleteOne

    //删除所有name为张三的记录
    collection.DeleteOne(filter.Eq("name", "张三"));
    

    批量删除DeleteMany

    //删除所有年龄大于18的记录
    DeleteResult result = collection.DeleteMany(filter.Gt("age", 18));
    

    注意:单条删除是如果给定集合有多条记录,不会报错,而会直接删除第一条记录

    类型映射

    映射方式

    给定泛型则会自动映射

    //获取collection时给定泛型
    var collection = mydb.GetCollection<Userinfo>("userinfos");
    var filter = Builders<Userinfo>.Filter;
    var sort = Builders<Userinfo>.Sort;
    

    使用属性

    • BsonId修饰的字段对应BsonDocument中的_id
    • BsonDefaultValue(value)用于指定默认值
    • BsonIgnore表示不映射,即使BsonDocument中包含该字段也不会赋值给属性
    • BsonExtraElements修饰的字段用于存储没有映射到类中的其他属性
    • BsonElement可以指定修饰的属性映射到BsonDocument中的哪个字段

    使用LINQ

    引用usingMongoDB.Driver.Linq后,使用collection.AsQueryable()获取IMongoQueryable实例,然后就可以使用Linq对这个IMongoQueryable进行查询了。

    List<Userinfo> userList1 = (from user in userCollection.AsQueryable()
                                where user.age > 22
                                select user).ToList();
    
    List<Userinfo> userList2= userCollection.AsQueryable().Where(s => s.age > 22).ToList();
    
  • 相关阅读:
    boost库的使用介绍
    《架构实战软件架构设计的过程》
    常用开发命令
    《项目管理最佳实践案例剖析》
    From Live Writer
    希望实现的程序
    正在进行调试的Web服务器进程已由Internet信息服务(IIS)终止。可以通过在IIS中配置应用程序池Ping设置来避免这一问题。有关更多详细信息,请参见“帮助”
    请确保此代码文件中定义的类与“inherits”属性匹配
    更改IE默认源代码编辑器
    MS的.net源码地址
  • 原文地址:https://www.cnblogs.com/muphalem/p/13818085.html
Copyright © 2011-2022 走看看