MongDB学习笔记

MongDB笔记

  1. 数据库:
    1. 数据库是按照数据结构来组织、存储和管理数据的仓库。
    2. 我们的程序都是在内存中运行的,一旦程序运行结束或者计算机断电,程序运行中的数据都会丢失。
    3. 所以我们就需要将一些程序运行的数据持久化到硬盘之中,以确保数据的安全性。而数据库就是数据持久化的最佳选择。
    4. 数据库就是存储数据的仓库。
  2. 数据库的分类:

2.1关系型数据库(RDBMS):

  MySQL、Oracle、DB2、SQL Server ......

  关系数据库中全都是表

2.2非关系型数据库(No SQL)

MongoDB、Redis ......

键值对数据库:Redis…

文档数据库:MongoDB…

  1. MongoDB简介
    1. MongoDB是为快速开发互联网Web应用而设计的数据库系统。
    2. MongoDB的设计目标是极简、灵活、作为Web应用栈的一部分。
    3. MongoDB简介•MongoDB是为快速开发互联网Web应用而设计的数据库系统。•MongoDB的设计目标是极简、灵活、作为Web应用栈的一部分。•MongoDB的数据模型是面向文档的,所谓文档是一种类似于JSON的结构,简单理解MongoDB这个数据库中存的是各种各样的JSON。(MongDB中称为BSON)
  2. 下载MongoDB
    1. https://www.mongodb.org/dl/win32/
    2. MongoDB的版本偶数版本为稳定版,奇数版本为开发版。
    3. MongoDB对于32位系统支持不佳,所以3.2版本以后没有再对32位系统的支持
  3. MongDB安装

https://www.cnblogs.com/dreamsqin/p/10885038.html

  1. 启动MongoDB
    1. 将MongoDB的bin目录添加到path下
    2. cmd中执行以下操作

uploading.4e448015.gif正在上传…重新上传取消

    1. 指定端口和路径

控制台输入命令:

mongod --dbpath 路径--port 端口号

例:mongod --dbpath C:\Users\lilichao\Desktop\mongo\data\db --port 123(最大不超过65535)

  1. 配置MongDB的windows服务

https://www.cnblogs.com/zhoulifeng/p/9429597.html

  1. 删除MongDB服务

sc delete 服务名

  1. 关闭MongDB
    1. 打开Dos界面
    2. 登录服务器mongDB
    3. 切换管理员:admin
    4. 关闭数据库

db.shuntDownServer();

uploading.4e448015.gif正在上传…重新上传取消(notepad++启动)

  1. 数据库
    1. 数据库服务器:服务器用来保存数据
    2. 数据库客户端:客户端用来操作数据库,对数据库进行增删改查的操作
  2. 将MongDB设置为系统服务,可以在后台自动启动,不需要每次重新启动

11. 1 在c盘根目录创建data

           - 在data下创建db和log文件夹

11.2 创建配置文件

在目录 C:\Program Files\MongoDB\Server\3.2 下添加一个配置文件

    mongod.cfg

11.3 以管理员身份打开命令行窗口

 

11.4 执行如下的命令

  1)sc.exe create MongoDB binPath= "\"C:\Program   Files\MongoDB\Server\3.2\bin\mongod.exe\" --service --config=\"C:\Program Files\MongoDB\Server\3.2\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"

  2) sc.exe create MongoDB binPath= "\"mongod的bin目录\mongod.exe\" --service --config=\"mongo的安装目录\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"

11.5 启动mongodb服务

11.6 如果启动失败,证明上边的操作有误,在控制台输入 sc delete MongoDB 删除之前配置的服务,然后从第一步再来一次

  1. MongoDB的基本概念

12.1 数据库:

  数据库是一个仓库,在仓库中可以存放集合。

12.2 集合(collection)

  集合类似于数组,在集合中可以存放文档。

  集合就是一组文档,也就是集合是用来存放文档的。

  集合中存储的文档可以是各种各样的,没有格式要求。

12.3 文档(document)

  文档数据库中的最小单位,我们存储和操作的内容都是文档。

  类似于JS中的对象,在MongoDB中每一条数据都是一个文档。

12.4 在MongDB中,数据库和集合都不需要手动创建,当我们创建文档时,如果文档所在的集合或数据库不存在会自动创建数据库和集合。会在第一次向数据库中插入文档时创建数据库。

12.5 多个文档组成集合,多个集合组成数据库。

uploading.4e448015.gif正在上传…重新上传取消

  1. MongDB基本操作
    1. 显示当前所有数据库

show dbs

show databases

    1. 进入到指定数据库

use 数据库名

    1. 表示当前所处数据库

db

    1. 显示数据库中所有集合

show collections

  1. MongDC的CURD操作
    1. 向数据库中插入文档

向集合中插入一个文档:db.<collection名>.insert(doc)

例:db.stus.insert({name:"孙悟空",age:18,gender:"男"})

    1. 查询当前数据库中所有文档

db.<collection名>.find()

  1. 可视化工具

Robo 3T

MongoChef

mongodbmanagerfree

  1. 向数据库中插入文档
    1. 命令添加文档db.collection.insert (文档对象)
    2. insert()可以用于向集合中添加一个或多个文档,可以传递一个对象,或一个数组。
    3. 可以将对象或数组中的对象添加进集合中。
    4. 添加时如果集合或数据库不存在,会自动创建。
    5. 插入的文档对象会默认添加_id属性,这个属性对应一个唯一的id,是文档的唯一标识(id的组成部分为)。
  2. 案例
    1. 插入文档
      1. 基本命令

db.<collection>.insert()

  --向集合中插入一个或多个文档。

  --当我们向集合中插入文档时,如果没有给文档指定_id属性,则数据库会自动为文档添加_id该属性用来作为文档的唯一标识。

  --_id我们可以自己指定,如果我们指定了数据库就不会在添加了,如果自己指定_id 也必须确保它的唯一性。

db.collection.insertOne();

  --插入一个文档对象

db.collection.insertMany()

  --插入多个文档对象

      1. 插入一个文档

db.stus.insert({name:"猪八戒",age:28,gender:"男"});

      1. 插入多个文档

db.stus.insert([

    {name:"沙和尚",age:38,gender:"男"},

    {name:"白骨精",age:16,gender:"女"},

    {name:"蜘蛛精",age:14,gender:"女"}

]);

      1. 指定id插入文档

db.stus.insert({_id:"hello",name:"猪八戒",age:28,gender:"男"});

      1. 生成”_id”字段

ObjectId();

    1. 删除文档
      1. db.collection.remove()

--删除一个或多个,可以第二个参数传递一个true,则只会删除一个

--如果传递一个空对象作为参数,则会删除所有的

      1. db.collection.deleteOne()

删除一个文档

      1. db.collection.deleteMany()

从集合中删除符合条件的所有文档

      1. db.collection.drop()

删除集合

      1. db.dropDatabase()

删除数据库

      1. 注意:
  • 一般数据中的数据都不会除,所以除的方法很少
  • 一般会在数据中添加一个字段,来表示数据是否被
    1. 查询文档
      1. db.collection.find()

find()用来查询所有符合条件的文档

find()可以接收一个对象作为条件参数

 {}表示查询集合中所有文档

 {属性:值}查询属性是指定值的文档

 //$gt:大于

 //$eq:等于

 //$lt:小于

findOne返回的是一个数组

      1. db.collection.findOne()

查询集合中符合条件的第一个文档

findOne():返回一个文档对象

      1. db.collection.find({}).count()

查询所有结果的数量

    1. 修改文档
      1. db.collection.update(查询条件,新对象)

update()默认情况下会使用新对象替换旧对象

如果需要修改指定的属性,而不是替换需要使用“修改操作符”来完成修改

$set 可以用来修改文档中的指定属性

$unset 可以用来删除文档的指定属性

$inc 增加已有键的值,该键值不存在则创建一个键值。

     $inc只能用于创建Number类型的值

update()默认只会修改一个

db.stus.update({name:"沙和尚"},{age:28});

db.stus.update(

    {"_id" : ObjectId("59c219689410bc1dbecc0709")},

    {$set:{

        gender:"",

        address:"流沙河"

    }}   

)

 

db.stus.update(

    {"_id" : ObjectId("59c219689410bc1dbecc0709")},

    {$unset:{

        address:1

    }}   

)

      1. db.collection.updateMany()

同时修改多个符合条件的文档

db.stus.updateMany(

    {"name" : "猪八戒"},

    {

        $set:{

            address:"猪老庄"

        }

    }   

);

      1. db.collection.updateOne()

修改一个符合条件的文档

db.stus.update(

    {"name" : "猪八戒"},

   

    {

        $set:{

        address:"呵呵呵"

        }

    }  ,

    {

        multi:true

    }   

)

      1. db.collection.replaceOne()

替换一个文档

  1. 练习
    1. 进入my_test数据库

use my_test

uploading.4e448015.gif正在上传…重新上传取消

    1. 向数据库的user集合中插入一个文档

db.user.insert({name:"阿三哥",age:"998",national:"ff"});

uploading.4e448015.gif正在上传…重新上传取消

    1. 查询user集合中的文档

db.user.find()

uploading.4e448015.gif正在上传…重新上传取消

    1. 统计数据库user集合中的文档数量

db.user.find({}).count();

uploading.4e448015.gif正在上传…重新上传取消

    1. 查询数据库user集合中name为阿三哥的文档

uploading.4e448015.gif正在上传…重新上传取消

    1. 向数据库user集合中的name为阿三哥的文档,添加一个address属性,属性值为印度

db.user.updateMany({name:"阿三哥"},{$set:{address:"印度"}});

uploading.4e448015.gif正在上传…重新上传取消

    1. 使用{name:"阿七哥"} 替换 name 为 阿三哥的文档

db.user.replaceOne({name:"阿三哥"},{name:"阿七哥"})

uploading.4e448015.gif正在上传…重新上传取消

    1. 删除name为阿七哥的文档的address属性

db.user.updateMany({name:"阿七哥"},{$unset:{address:"印度"}});

uploading.4e448015.gif正在上传…重新上传取消

    1. 向name为阿七哥的文档中,添加一个hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}

db.user.updateMany({name:"阿七哥"},{$set:{hobby:{cities:["beijing","shanghai","shenzhen"] , movies:["sanguo","hero"]}}});

uploading.4e448015.gif正在上传…重新上传取消

    1. 向name为阿六哥的文档中,添加一个hobby:{movies:["A Chinese Odyssey","King of comedy"]}(内嵌文档)

db.user.updateMany({name:"阿六哥"},{$set:{hobby:{movies:["A Chinese Odyssey","King of comedy"]}}});

uploading.4e448015.gif正在上传…重新上传取消

    1. 查询喜欢电影hero的文档

db.user.find({"hobby.movies":"hero"});

uploading.4e448015.gif正在上传…重新上传取消

    1. 向阿六哥中添加一个新的电影Interstellar

db.user.update({name:"阿六哥"},{$push:{"hobby.movies":"Interstellar"}})

uploading.4e448015.gif正在上传…重新上传取消

    1. 删除喜欢beijing的用户

db.user.remove({"hobby.cities":"beijing"})

uploading.4e448015.gif正在上传…重新上传取消

    1. 删除user集合

db.user.drop();

    1. 向numbers中插入20000条数据

use me

for(var i=1 ; i<= 20000; i++){

db.numbers.insert({num:i});

}

db.numbers.find();

//更快

//1.7s

var arr = [];

for(var i =1;i<=20000; i++){

arr.push({num:i});

}

db.numbers.insert(arr);

uploading.4e448015.gif正在上传…重新上传取消

    1. 查询numbers中num为500的文档

db.numbers.find({num:500});

uploading.4e448015.gif正在上传…重新上传取消

    1. 查询numbers中num大于5000的文档

db.numbers.find({num:{$gt:5000}});

uploading.4e448015.gif正在上传…重新上传取消

    1. 查询numbers中num小于30的文档

         db.numbers.find({num:{$lt:30}});

uploading.4e448015.gif正在上传…重新上传取消

    1. 查询numbers中num大于40小于50的文档

         db.numbers.find({num:{$gt:40,$lt:50}})

       uploading.4e448015.gif正在上传…重新上传取消

    1. 查询numbers中num大于19996的文档

         db.numbers.find({num:{$gt:19996}})

    uploading.4e448015.gif正在上传…重新上传取消

    1. 查看numbers集合中的前10条数据

         db.numbers.find({num:{$lte:10}})

   uploading.4e448015.gif正在上传…重新上传取消

    1. 查看numbers集合中的第11条到20条数据

         db.numbers.find().skip(10).limit(10);

         uploading.4e448015.gif正在上传…重新上传取消

    1. 查看numbers集合中的第21条到30条数据

         db.numbers.find().skip(20).limit(10);

         uploading.4e448015.gif正在上传…重新上传取消

    1. 将dept和emp集合导入到数据库中

导入数据库命令:mongoimport --db test(数据库名) --collection user(集合名) --file C:\Users\zhang_zk\Desktop\new.json(json文件路径)

  1. W+R打开cmd控制台

uploading.4e448015.gif正在上传…重新上传取消

  1. 进入到MongDB安装的bin目录

uploading.4e448015.gif正在上传…重新上传取消

  1. 执行mongoimport的命令

mongoimport --db me --collection dept --file C:\Users\Administrator\Desktop\尚硅谷MongoDB教程\课件\MongoDB\数据\dept.json

mongoimport --db me --collection emp --file C:\Users\Administrator\Desktop\尚硅谷MongoDB教程\课件\MongoDB\数据\emp.json

uploading.4e448015.gif正在上传…重新上传取消

uploading.4e448015.gif正在上传…重新上传取消

    1. 查询工资小于2000的员工

         db.emp.find({sal:{$lt:2000}})

         uploading.4e448015.gif正在上传…重新上传取消

    1. 查询工资在1000-2000之间的员工

         db.emp.find({sal:{$lt:2000,$gt:1000}})

         uploading.4e448015.gif正在上传…重新上传取消

    1. 查询工资小于1000或大于2500的员工

         db.emp.find({$or:[{sal:{$lt:1000}},{sal:{$gt:2500}}]});

         uploading.4e448015.gif正在上传…重新上传取消

    1. 查询财务部的所有员工

         var depno = db.dept.findOne({dname:"财务部"}).deptno;

         db.emp.find({depno:depno});

         uploading.4e448015.gif正在上传…重新上传取消

    1. 查询销售部的所有员工

         var depno = db.dept.findOne({dname:"销售部"}).deptno;

         db.emp.find({depno:depno});

         uploading.4e448015.gif正在上传…重新上传取消

    1. 查询所有mgr为7698的所有员工

         db.emp.find({mgr:7698});

         uploading.4e448015.gif正在上传…重新上传取消

    1. 为所有薪资低于1000的员工增加工资400元db.emp.updateMany({sal:{$lte:1000}},{$inc:{sal:400}});

db.emp.find();

uploading.4e448015.gif正在上传…重新上传取消

  1. Mongoose

19.1

           之前我们都是通过shell来完成对数据库的各种操作的,在开发中大部分时候我们都需要通过程序来完成对数据库的操作

           而Mongoose就是一个让我们可以通过Node来操作MongoDB的模块

           Mongoose是一个对象文档模型(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。

           在大多数情况下,它被用来把结构化的模式应用到一个MongoDB集合,并提供了验证和类型转换等好处

19.2 Mongoose的好处

           1)可以为文档创建一个模式结构(Schema)

           2)可以对模型中的对象/文档进行验证

           3)数据可以通过类型转换转换为对象模型

           4)可以使用中间件来应用业务逻辑挂钩

           5)比Node原生的MongoDB驱动更容易

19.2 mongoose提供的几个新的对象

           1)Schema(模式对象)

                    Schema对象定义约束了数据库中的文档结构

           2)Model

                    Model对象作为集合中的所有文档的表示,相当于MongoDB数据库中的collection

           3)Document

                    Document表示集合中的所有文档的表示,相当于MongoDB数据库中的集合collection

19.3 通过mongoose连接MongoDB

           1)使用Mongoose必须先安装mongoose包

                    npm install mongoose

           2)加载Mongoose

                    const mongoose = require(“mongoose”)

           3)连接数据库

                    mongoose.connect(“mongdb://地址”)

         4)断开连接

                    mongoose.disconnect()

           5)一旦连接了MongoDB数据库,底层的Connection对象就可以通过mongoose模块的conection属性来访问。

           6)connection对象是对数据库连接的抽象,它提供了对象连接、底层的Db对象和表示结合的Model对象的访问。

           7)并且可以对connection对象上的一些事件进行监听,来获悉数据库连接的开始与端开。

           8)比如,可以通过open和close事件来监控连接的打开和关闭。

19.4 Schema模式对象

           19.4.1

                    1)使用Mongoose你必须经常定义模式。

                    2)模式为集合中的文档定义字段和字段类型。

                    3)如果你的数据是被结构化成支持模式的,这是非常有用的

                    4)简单来说,模式就是对文档的约束,有了模式,文档中的字段必须符合模式的规定。否则将不能正常操作。

           19.4.1 定义模式

                    1)模式为集合中的文档定义字段和字段类型。

                    2)对于在模式中的每个字段,你都需要定一个特定的值类型。受支持的类型如下:

                    -- String

                    -- Number

                    -- Boolean

                    -- Array

                    -- Buffer

                    -- Date

                    -- ObjectId或Oid

                    -- Mixed

                    3)需要为你计划使用的每个不同的文档类型都定义一个模式。

           19.4.2 创建模式定义

                    1)模式需要通过mongoose的Schema属性来创建,这个属性是一个构造函数

                             -- new Schema(definition, option)

              .definition(描述模式)

                             .options 配置对象,定义与数据库中集合的交互

                             uploading.4e448015.gif正在上传…重新上传取消

           2)options常用选项

           -- autoIndex 布尔值,开启自动索引,默认true

           -- bufferCommands 布尔值,缓存由于连接问题无法执行的语句,默认true

           -- capped 集合中最大文档数量

           -- collection 指定应用Schema的集合名称

           -- id 布尔值,是否有应用于_id的id处理器,默认true

           -- _id 布尔值,是否有自动分配id字段,默认true

           -- strict 布尔值,不符合Schema的对象不会被插入到数据库,默认true

19.5 Model对象

           19.5.1 Model模型对象

                    1)一旦定义好了Schema对象,就需要通过该Schema对象来创建Model对象。

                    2)一旦创建好了Model对象,就会自动和数据库中对应的集合建立连接,以确保在应用更改时,集合已经创建并具有适当的索引,且设置了必须性和唯一性。

                    3)Model对象就相当于数据库中的集合,通过Model可以完成对集合的CRUD操作。

           19.5.2 创建Model模型对象

               1)创建模型对象需要使用mongoose的model()方法

                             -- model(name, [schema], [collection] , [skipInit])

                               -name参数相当于模型的名字,以后可以同过name找到模型

                               -schema是创建好的模式对象

                               -collection是要连接的集合名

                               -skipInit是否跳过初始化,默认是false。

                    2)一旦把一个Schema对象编译成一个Model对象,你就完全准备好开始在模型中访问、添加、删除、更新和删除文档了。也就是说有了模型以后我们就可以操作数据库了。

           19.5.3 Model对象的方法

                    remove(conditions,callback)

                    deleteOne(conditions, callback)

                    deleteMany(conditions,callback)

                    find(conditions, projection, options, callback)

                    findById(id, projection, options, callback)

                    findOne(conditions,projection,options,callback)

                    count(conditions, callback)

                    create(doc, callback)

                    update(conditions, doc, options, callback)

                    等等

19.5 Document文档对象

           19.5.1 Document对象理解

                    1)通过Model对数据库进行查询时,会返回Document对象或Document对象数组。

                    2)Document继承自Model,代表一个集合中的文档。

                    3)Document对象也可以和数据库进行交互操作。

           19.5.2 Document对象的方法

                    1)equals(doc)

                    2)id

                    3)get(path,[type])

                    4)set(path,value,[type])

                    5)update(update,[options],[callback])

                    6)save([callback])

                    7)remove([callback])

                    8)isNew

                    9)isInit(path)

                    10)toJSON

                    11)toObject

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任风雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值