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();
posted @ 2020-10-14 23:32  Muphalem  阅读(537)  评论(0编辑  收藏  举报
/* 看板娘 */