MongoDB基础教程(数据库精讲)

MongoDB基础教程(数据库精讲)

MongoDB中文手册|官方文档中文版:

https://docs.mongoing.com/

MongoDB 中文手册

https://mongodb.net.cn/manual/

MongoDB:

  一、数据库(database)

     什么是数据库?
    存储数据的仓库

    为什么要有数据库?
      首先数据是存储在内存里运行的,如果一断电的话,数据就会丢失,所以可以将数据存储到硬盘,但是硬盘没有联网,所以有了可以联网也可以存储数据的数据库。

    数据库的分类
      按照关系型分类:

        1、关系型数据库(MySQL、Orcal等) 2、非关系型数据库(MongoDB)

  

      关系型和非关系型的区别:
      总而言之就是:关系型的是创建表格, 非关系型是可以创建任意多个文档。    

      1、数据存储方式不同。
      关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。

      与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。

2、扩展方式不同。

      SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。
要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。

      因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来客服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。而NoSQL数据库是横向扩展的。

      而非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。

3、对事务性的支持不同。

      如果数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。

二、MongoDB
  ①什么是MongoDB?
    一种数据库,而且是非关系型数据库它是文档数据库。
  ②MongoDB的优点
    1、可以快速开发web型应用,因为灵活,不用像关系型数据库一样需要建表
    2、MongoDB存储的是文档(document),文档内存储的是类似json的结构,所谓json就是字符串数组(BSON)

三、MongoDB常见命令
  1、安装MongoDB,去官网下载并安装,随后将bin文件设置成环境变量path的变量。

  2、MongoDB常见的命令

  Mongod开启服务器

  mongo开启客户端

  

  MongoDB的数据库分类
    数据库(database):用来存储集合的,而且数据库也有分大小。
    集合(collection):集合类似于数组,用于存放文档的
    文档(document): 文档是MongoDB数据库中最小的单位,我们要操作的目标就是文档。

MongoDB基础教程(数据库精讲)

 

 

  在MongoDB中不需要自己创建数据库和集合,便可以直接创建文档,其实就是在创建文档的同时,会将数据库和集合创建了。

基础代码:

   use test;     //进入数据库如果没有会自己创建不过前提是里面有东西

  show dbs;/show databases;     //都是显示数据库的

  show collections;  //显示当前数据库有什么集合

  db;   //查看是在哪一个数据库中

  

对mongodb数据库的CRUD操作

  insert()方法淘汰了

  db.collection.insert() 表示增加一个或多个文档

  例如:  

    db.stus.insert({name: "孙悟空", age: 28, address:"花果山"});

    /*
      表示向 集合名为stus插入了文档, 文档内容是对象。
      集合名是自己创建的,想用什么名称就用什么。
    */

    db.stus.insert([
    {name:"猪八戒", age: 38, address:"高老庄"},
    {name: "沙和尚", age: 45, address:"流沙河"}
    ]);
    /*
    可以注意到: 传递的数据是数组,数组内部是对象,
    其实对象就相当于文档,这就是插入了两个文档。
    */

    db.stus.insertOne({name:"唐僧", age: 18, address: "女儿国"});
    /*
    表示向集合名为stus的 插入了一个文档。
    */

    db.stus.insertMany([
    {name:"白骨精", age:20,address:"白骨洞"},
    {name:"蜘蛛精", age: 24, address:"蜘蛛洞"}
    ]);
    /*
    可以看到,用法是和insert是相差不多的。数组里面有对象,对象即是文档。
    */

   

    /*

    添加完成的时候会自动填一个_id唯一标识,也可以手动ObjectId();添加

    */

 

查找
要想查询上面插入的内容,便可调用查找的方法

  /*

  --查询全部

  db.collection.find({});

  -find()用来查询集合中所有符合条件的文档
  -find()可以接收一个对象作为条件查询
  -find返回的是数组
  -{}查询集合所有的文档
  -{字段名:值}查询属性是指定值的文档
  db.controller.findOne();
  -用来查询集合中符合条件的第一个文档
  -findOne返回的是一个文档对象
  db.collection.find().count();查询结果的数量

  */

例如:

  db.stus.find({});

  db.stus.find({age:18});

  //这条语句表示的是查询age是18的文档。 值得注意的是,条件也是写在了对象里面,
  //也是因为传入的值需要是json语句

 

如果想要知道有多少个的时候,则可以使用

  db.controller.find().count(); 使用count()来计数

 

/*
  修改

  update方法淘汰
  db.collection.update(查询条件,新对象);
  -update()默认情况会使用新的对象来替换旧的对象
  -如果需要修改指定的属性,而不是替换需要使用"修改操作符"未完成修改
  -$set 可以用来修改文档中的指定属性
  - $unset 可以用来删除文档的指定属性

  db.collection.updateMany()
  -同时修改多个符合条件的文档

  db.collection.updateOne()
  -修改一个符合条件的文档

  db.stus.replaceOne()
  -替换

  -update自会修改一个
  */
例如:
db.stus.update({"_id":ObjectId("61711460e60c2c749a9186c2")},
{$set:{
gender:"男",
name:"沙和尚"
    }

  }
);


db.stus.update(

{"_id":ObjectId("61711460e60c2c749a9186c2")},
{

$unset:{
age:18
    }

  }
)

db.stus.updateMany(
{"name":"猪八戒"},
{
$set:{
address:"高老庄"
    }
  }
);

 

db.stus.replaceOne(
{"address":"呵呵呵"},
{
name:"猪八戒",
gender:"男",
address:"高老庄",
age:"12"
}
);



/*
  删除:
    db.collection.remove()
      -删除符合条件的所有文档有几个删除几个默认删除多个
      -如果remove()第二个参数是一个true,则只会删除一个
      -如果只传递一个空对象作为参数则全部删除
    db.collection.deleteOne()
    db.collection.deleteMany()
      -remove()可以根据条件删除文档,传递的条件的方式和find一样
    db.collection.drop();
      -删除集合
    db.dropDatabase();
    -删除数据库

  --数据库中的数据一般都不会删除,所以删除的方法很少使用
  一般在数据库中添加一个字段,表示是否被删除
    查询的时候idDel:0
*/

  例如:
    db.stus.remove({gender:"男"});
      有多个男删除多个

    db.stus.remove({_id:"6170e410e60c2c749a9186bc"});
      唯一删除一个

    db.stus.remove({age:"38"},true);

      假删除练习从创建库开始
/*
  1.先删除数据库
  2.查询数据库看删除了没有
  3.创建数据库
  4.添加数据只有添加数据库才算创建成功
  5.加删除的字段0未删除1删除数据库的数据没事别删除
  6.查询的时候只查询加删除字段为1的就行
*/

具体步骤如下:

db.stus.drop();


show dbs;

db.stus.find();

use test;

db.stus.insert([
{
name:"zbj",
isDel:0
},
{
name:"shs",
isDel:0
},
{
name:"ts",
isDel:0
}]
);


db.stus.updateOne({name:"ts"},{
$set:{
isDel:1
}
});


db.stus.find({isDel:0});

上一篇:SpringBoot整合MongoDB完成增删改查分页查询


下一篇:Nginx操作命令行常用总结