非关系型数据库Mongodb的基本使用

数据库(Database)

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

数据库分类

数据库主要分成两种:

  • 关系型数据库(RDBMS)
    • MySQL、Oracle、DB2、SQL Server……
    • 关系数据库中全部都是表
  • 非关系型数据库(No SQL)
    • MongoDB、Redis……
    • 键值对数据库
    • 文档数据库MongoDB

MongoDB简介

  • MongoDB是为快速开发互联网 Web应用而设计的数据库系统 。
  • MongoDB的设计目标是极简、灵活 、作为Web应用栈的一部分。
  • MongoDB的数据模型是面向文档的,所谓文档是一种类似于JSON的结构,简单理解MongoDB这个数据库中存的 是各种各样的JSON.(BSON)

三个概念

  • 数据库(database)
    • 数据库是一个 仓库,在仓库中可以存放集合。
  • 集合(collection)
    • 集合类似于数组,在集合中可以存放文档。
  • 文档(document)
    • 文档数据库中的最小单位,我们存储和操作内容都是文档。

下载MongoDB

  • 下载地址 https://www.mongodb.com/download-center
  • MongoDB的版本偶数版本号位稳定版,奇数版本为开发版。
  • MongoDB对于32位系统支持不佳,所以3.2版本以后没有再对32位系统的支持。

安装MongoDB

  • 安装,下载应用程序,直接傻瓜式下一步安装即可。
  • 配置环境变量
    • C:\Program Files\MongoDB\Server\4.0\bin
  • 在c盘根目录下
    • 创建一个文件夹data
    • 在data中创建一个文件夹db
  • 打开cmd命令行窗口
    • 输入 mongod启动 mongodb 服务器
    • 32位注意:
    • 启动 服务器时,需要输入如下内容
      mongod -storageEngine=mmapvl
  • 在重新打开一个cmd窗口
    • 输入 mongo 连接mongodb, 出现 > 说明安装成功
  • 更改数据库数据存放路径
    • mongod –dbpath 数据库路径 –port 端口号
  • 数据库(database)
    • 数据库的服务器
    • 服务器用来保存数据
    • mongod 用来启动服务器
    • 数据库的客户端
    • 客户端用来操作服务器,对数据进行怎删改查的操作
    • mongo 启动客户端
  • 将MongoDB设置为系统服务,可以自动在后台启动,不需要每次都手动启动
    • 在c盘根目录创建data文件夹
    • 在data目录下创建db和log文件夹
    • 创建配置文件
    • 在目录 C:\Program Files\MongoDB\Server\4.0 下添加一个配置文件
      • 在桌面上创建一个 mongod.cfg 文件,里面内容如下
      • systemLog:
        destination: file
        path: c:\data\log\mongod.log
        storage:
        dbPath: c:\data\db
    • 以管理员的身份打开命令行窗口
    • 执行如下的命令
    • sc.exe create MongoDB binPath= “\”C:\Program Files\MongoDB\Server\4.0\bin\mongod.exe\” –service –config=\”C:\Program Files\MongoDB\Server\4.0\mongod.cfg\”” DisplayName= “MongoDB” start= “auto”
      # 输入上面命令即可,更改路径参考如下
      sc.exe create MongoDB binPath= “\”mongodb的bin目录\mongod.exe\” –service –config=\”mongodb的安装目录\mongod.cfg\”” DisplayName= “MongoDB” start= “auto”
    • 启动mongodb服务(右键 任务管理器 服务 mongodb服务 右键 启动)
    • 下次不用在手动启动服务,直接连接即可
    • 如果启动失败,上述操作有误,在控制台输入 sc delete MongoDB删除之前配置的服务,重新安装

基本指令

常用指令

在MongoDB中,数据库和集合都不需要手动创建,当我们创建文件时,如果文档所在的集合或数据库不存在会自动创建数据库和集合

  • mongod 开启数据库
  • mongo 连接数据库
  • show dbs & show databases 显示当前所有数据库
  • use test 进入/切换数据库
  • db 表示当前所处数据库
  • show collections 显示数据库中的所有集合

数据库的CRUD(增删改查)的操作

  • 向集合中中插入文档
    • db..insert(doc)
    • db..insertOne()
    • db..insertMany()
    • 向集合中插入一个或者多个文档
    • 当我们向集合中插入文档时,如果没有给文档指定 id 属性,则数据库会自动为文档添加 _id,该属性用来作为文档的唯一标识
    • _id 我们可以自己指定,如果我们制定了数据库就不会在添加了,如果自己自定 _id 也必须确保唯一性
    • 例子:向test数据库中的stus集合中插入一个新的学生对象
      • db.stus.insert({name: ‘孙悟空’})
      • db.students.insert({_id: “hello”,name: “猪八戒”,age: 23,gender: “男”}) 指定id
      • db.students.insert([
        {name: “猪八戒1”,age: 231,gender: “男”},
        {name: “猪八戒3”,age: 23,gender: “男”}
        ])
  • 查询数据
    • db..find()
    • find()查询当前集合中的所有符合条件的文档
    • find()中可以接收一个对象作为条件参数
    • find({}) 标识查询集合中所有的文档
    • find({字段名:值}) 查询属性是指定值的文档
    • 返回的是一个数据组
    • 案例:
      • db.students.find({_id:”hello”})
      • db.students.find({_id:”hello”,name: “猪八戒”})
    • db..findOne()
    • 用来查询集合中符合条件的第一个文档
    • findOne()返回的是一个文档对象
    • db..find({}).count()
    • 查询所有结果的数量
  • 修改数据
    • db.collection.update(查询条件,新对象)
    • update() 默认情况下会使用新对象来替换旧的对象,例如
      • db.students.update({_id: “hello”},{age: 0})
    • 如果需要修改指定的属性,而不是替换需要使用“修改操作符 $set”来完成修改
      • $set可以用来修改文档中指定的属性
      • db.students.update({age: 231},{$set: {name: “xxx”, address: “111”}})
      • $unset 可以用来删除文档的指定属性
      • db.students.update({age: 231},{$unset: {address: “111”}})
      • update()默认只会修改一个
      • update()修改多个
      • db.students.update({“name”: “哈哈”},{$set: {address: “哈哈哈”}},{multi: true})
    • db..updateMany()
    • 同时修改多个符合条件的文档
      • db.students.updateMany({age: 231},{$set: {age: 0, address: “111”}})
    • db..updateOne()
  • 删除数据
    • db..remove({})
    • remove()可以根据条件来删除文档,传递条件的方式和find()一样
    • 删除符合条件的所有文档(默认情况下回删除多个)
    • 如果remove()第二个参数传递一个true,则只会删除一个
    • 如果只传递一个空对象,就会删除集合中的所有数据
    • db..deleteOne()
    • db..deleteMany()
    • db..drop() 删除集合
    • db.dropDatabase() 删除数据库
    • 一般数据库中的数据都不会删除,所以删除的方法很少调用
    • 一般会在数据中添加一个字段,来表示数据是否被删除

MongoDB的文档的属性值也可以是一个文档,当一个文档的属性值是一个文档时,我们称为这个文档叫做 内嵌文档

db.users.update({username: "tangseng"}, {$set: {hobby: {citys: ['上海','北京','广州'],movies: ['sanguo','hero']}}})

MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档则可以通过.的形式

如果要通过内嵌文档来对文档进行查询,此时属性名必须使用引号

db.users.find({'hobby.movies': 'hero'})

$push用于向数组中添加一个新元素

$addToSet向数组中添加一个新元素,如果数组中已经存在了该元素,则不会添加

db.users.update({username: "tangseng"},{$push: {"hobby.movies": "Interstellar"}})
db.users.update({username: "tangseng"},{$addToSet: {"hobby.movies": "Interstellar"}})

向数据库中插入20000条数据

var arr = []
for(var i = 1 ; i <= 20000 ; i++){
    arr.push({num: i})
}
db.numbers.insert(arr)

查询操作符的使用

db.numbers.find({num: {$gt: 30}})  # 大于
db.numbers.find({num: {$lt: 30}})  # 小于
db.numbers.find({num: {$eq: 30}})  # 等于
$lte # 小于等于
$gte # 大于等于
{num: {$gt: 40, $lt: 50}} # 大于40小于50
db.numbers.find().limit(10) # 显示前10条数据
db.numbers.find().skip(10).limit(10) # 查询第11-20条数据  skip()用于跳过指定数量的数据
skip((页码-1) * 每页显示的条数).limit(每页显示的条数)
db.emp.find({$or: [{sal: {$lt: 1000}}, {sal: {$gt: 2500}}]}) # 小于1000或者大于2500

# sort()可以用来指定文档的拍讯的规则,sort()中需要传递一个对象来指定排序规则,1升序,-1降序
db.emp.find().sort({sal: 1});  # 按照薪资 sal 排序,
db.emp.find().sort({sal: 1, age: -1})

# limit skip  sort 可以以任意的顺序进行调用

# 在查询时,可以在第二个参数的位置来设置查询结果的 投影
db.emp.find({},{ename: 1, _id: 0}) # 只显示ename字段

文档之间的关系

  • 一对一(one to one)
    • 夫妻(一个丈夫 对应 一个妻子)
    • 在MongoDB,可以通过内嵌文档的形式来体现出一对一的关系
  • 一对多(one to many )/ 多对一 (many to one)
    • 父母 孩子
    • 用户 订单
    • 文章 评论
    • 也可以通过内嵌文档来映射一对多的关系
  • 多对多(many to many)
    • 分类 商品
    • 老师 学生

MongoDB图形化界面工具的安装

下载地址1:https://en.freedownloadmanager.org/Windows-PC/NoSQL-Manager-for-MongoDB.html

下载地址2:https://en.freedownloadmanager.org/Windows-PC/MongoChef.html

猜你喜欢

转载自blog.csdn.net/yw00yw/article/details/81746304