MongoDB

MongoDB概念解析

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系型数据库和非关系型数据库之间的产品,是非关系型数据库当中功能最丰富,最像关系型数据库的。

关系型数据库与非关系型数据库的区别

关系型数据库
  1. 数据存储方式不同。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。
非关系型数据库
  1. 数据存储方式不同。非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。
MongoDB相比于关系型数据具备的优点
  • 高可扩展性
  • 分布式存储
  • 低成本
  • 结构灵活

命令行操作MongoDB

数据库常用命令
  1. 【db】 查看当前所在的数据库 > 当前的数据库的名称
    在这里插入图片描述

  2. 【show dbs】 查看所有的数据库 > 所有的数据库
    在这里插入图片描述

  3. 【use 数据库名称】 切换数据库(如果没有,新创建) > switched to db 数据库名称切换数据库
    如果没有,新创建

  4. 【db.dropDatabase( ) 】 删除当前数据库 > { “dropped” : “mydb”, “ok” : 1 }
    首先,检查列表数据库通过使用命令 show dbs
    如果想删除新数据库 , 那么 dropDatabase() 命令如下:
    在这里插入图片描述
    现在检查的数据库列表 就没有了

  5. [db.stats( )] 获取当前数据库的信息,比如Obj总数、数据库总大小、平均Obj大小等:
    在这里插入图片描述

  6. 【db.gps_point.stats( )】 > 获取当前数据库中集合的信息
    在这里插入图片描述

  7. 【 db.serverStatus( ) 】 获取服务器的状态:

  8. 【db.version( )】 查看当前数据库版本 > 版本号
    在这里插入图片描述

  9. 【db.getMongo()】 查看当前db的链接机器地址:
    在这里插入图片描述

  10. 【db.help( )】 显示数据库操作命令,里面有很多的命令:
    在这里插入图片描述

Collection 集合操作(数组)
  1. 创建一个聚集集合(table) db.createCollection(name, options);
  • name: 要创建的集合名称
  • options: 可选参数, 指定有关内存大小及索引的选项
    在这里插入图片描述
字段描述
capped是否启用集合限制,如果开启需要制定一个限制条件,默认为不启用,这个参数没有实际意义
size限制集合使用空间的大小,默认为没有限制
max集合中最大条数限制,默认为没有限制
autoIndexId是否使用_id作为索引,默认为使用(true或false)

size的优先级比max要搞

  1. 得到指定名称的集合 db.getCollection(name) 创建集合
    `db.createCollection(‘obj’, {
    autoIndexId: false
    })
  2. 查看已有集合: show collections 或 show tables 返回已创建的集合
    在这里插入图片描述
  3. 得到当前db的所有聚集集合: db.getCollectionNames() [所有集合名称]
  4. 删除集合 db.[collection].drop() true or false
    在这里插入图片描述
Document 文档操作 (对象)
  1. 【db.[集合名称].insert(变量 or 数据)】 插入数据
  2. 【 db.[集合名称].find( ) / db.[集合名称].findOne( ) 】 查找所有数据
    在这里插入图片描述在这里插入图片描述
  1. 更新文档
  • db.collection.update(查询条件,要更新的内容, { multi: true(是否全部更新) })
  • db.collection.save(文档数据) 方法通过传入的文档来替换已有文档,_id 主键存在就更新,不存在就插入
  1. 删除文档 db.collection.remove(query, justOne, writeConcern) 如果参数传递一个空对象则全部删除

query :(可选)删除的文档的条件。
justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档。
writeConcern :(可选)抛出异常的级别。

  1. 简单查询文档
  • findOne(): 它只返回一个文档。
  • and 多个条件查询 db.col.find({key1:value1, key2:value2}).pretty()
  • or 或者条件查询 db.col.find({$or:[{“by”:“条件1”},{“title”: “条件2”}]}).pretty()
集合查询
  1. 条件操作符
操作格式范例
等于{ key:value}db.col.find({“by”:“内容”})
小于{ key:{$lt:value}}db.col.find({“likes”:{$lt:50}}).pretty()
小于或等于{ key:{$lte:value}}db.col.find({“likes”:{$lte:50}}).pretty()
大于{ key:{$gt:value}}db.col.find({“likes”:{$gt:50}}).pretty()
大于或等于{ key:{$gte:value}}db.col.find({“likes”:{$gte:50}}).pretty()
不等于{ key:{$ne:value}}db.col.find({“likes”:{$ne:50}}).pretty()

模糊查询

  • 查询 title 包含"教"字的文档: db.col.find({title:/教/})
  • 查询 title 字段以"教"字开头的文档:db.col.find({title:/^教/})
  • 查询 titl e字段以"教"字结尾的文档:db.col.find({title:/教$/})
  1. 读取指定数量的数据记录 — Limit

db.COLLECTION_NAME.find().limit(num)

  1. 跳过指定数量的数据 — skip

db.COLLECTION_NAME.find().limit(num).skip(num)

  1. 排序

使用 sort() 方法对数据进行排序
db.COLLECTION_NAME.find().sort({KEY:1}) — 1为升序,-1为降序

MongoDB可视化工具 (Robo3T) 或 adminMongo

MongoDB可视化工具 MongoDBCompass

一、官网地址
解压文件夹找到文件打开
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
一直 next 到最后
在这里插入图片描述
在这里插入图片描述
一直点 即可。

Studio 3T的使用

一、官网地址
在这里插入图片描述

二、下载和安装

点击DOWNLOAD即可下载
在这里插入图片描述

按照自己电脑系统进行选择,然后填写邮箱和选择行业,第一次登录如果不提交不会下载,下载完成是一个zip压缩包(我的电脑是windows系统),解压缩安装即可,安装途中可以自行选择安装路径

安装完成选择连接:
在这里插入图片描述

根据提示进行操作,最后点击保存即可:
在这里插入图片描述

右键新建的连接,选择Add Database新建数据库:
在这里插入图片描述

输入数据库名称点击OK:
在这里插入图片描述

右键创建的database,选择Add Collection创建新的Collection(相当于新建关系型数据库中的表),也可以删除数据库Drop Database:
在这里插入图片描述

三、CRUD操作
首先打开命令行窗口,Open intelliShell:
在这里插入图片描述

红色框是输入的命令行,绿色框是输出的提示信息:

在这里插入图片描述

1、Insert操作详解

插入一个文档,db.collection.insertOne():
在这里插入图片描述

插入多个文档,db.collection.insertMany():
在这里插入图片描述

2、Query操作详解

查询所有, db.collection.find(),相当于:SELECT * FROM table_name

数据源

db.inventory.insertMany([
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "A" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" }
]);

在这里插入图片描述

按条件查询db.collection.find({ke:value}),相当于SELECT * FROM table_name WHERE name = ?

在这里插入图片描述

使用查询运算符指定条件
在这里插入图片描述

指定AND条件查询,相当于SELECT * FROM inventory WHERE status = “A” AND qty < 30

在这里插入图片描述

指定OR条件,相当于SELECT * FROM inventory WHERE status = “A” OR qty < 30

在这里插入图片描述

指定AND和OR条件,相当于SELECT * FROM inventory WHERE status = “A” AND ( qty < 30 OR item LIKE “p%” )

在这里插入图片描述

3、Update操作详解

数据源

db.inventory.insertMany( [
   { item: "canvas", qty: 100, size: { h: 28, w: 35.5, uom: "cm" }, status: "A" },
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "mat", qty: 85, size: { h: 27.9, w: 35.5, uom: "cm" }, status: "A" },
   { item: "mousepad", qty: 25, size: { h: 19, w: 22.85, uom: "cm" }, status: "P" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
   { item: "sketchbook", qty: 80, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "sketch pad", qty: 95, size: { h: 22.85, w: 30.5, uom: "cm" }, status: "A" }
] );

更新单个文档db.collection.updateOne()

在这里插入图片描述

更新多个文档db.collection.updateMany()

在这里插入图片描述

替换文档db.collection.replaceOne()。

在这里插入图片描述

4、Delete操作详解

数据源

db.inventory.insertMany( [
   { item: "journal", qty: 25, size: { h: 14, w: 21, uom: "cm" }, status: "A" },
   { item: "notebook", qty: 50, size: { h: 8.5, w: 11, uom: "in" }, status: "P" },
   { item: "paper", qty: 100, size: { h: 8.5, w: 11, uom: "in" }, status: "D" },
   { item: "planner", qty: 75, size: { h: 22.85, w: 30, uom: "cm" }, status: "D" },
   { item: "postcard", qty: 45, size: { h: 10, w: 15.25, uom: "cm" }, status: "A" },
] );

删除所有文档db.collection.deleteMany()

在这里插入图片描述

删除与条件匹配的文档

在这里插入图片描述

删除与条件匹配的一个文档
在这里插入图片描述

以上基本操作及其他扩展的法见:官网

在Express中利用Mongoose操作MongoDB

Mongoose 是一个让我们可以通过Node来操作MongoDB数据库的一个模块
  • Schema(模式对象)

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

  • Model

——Model 对象作为集合中的所有文档的表示,相当于MongoDB中的collection,它的每一个实例就是一个document文档

  • Document

——Document表示集合中的具体文档,相当于collection中的一个具体文档

关系:Schema生成Model,Model创造Document

  1. Mongoose的使用方式
  • 下载安装Mongoose(npm i mongoose --save)
  • 项目中引入mongoose(const mongoose = require(‘mongoose’))
  • 连接MongoDB数据库(mongoose.connect(‘mongodb://数据库ip地址 : 端口号( 默认端口27017可以省略 )/数据库名’))
  • 数据库连接成功事件(mongoose.connection.once(‘open’ , () => {}))
  • 数据库断开事件(mongoose.connection.once(‘close’ , () => {}))
  • 创建Schema对象(约束数据)
  1. const Schema = mongoose.Schema
  2.  var stuSchema = new Schema({
         name: String,
         gender: {
             type: String,
            default: 'male'
         }
     }, {
    timestamps: true (自动添加createdAt和updatedAt)
    

})

  • 将stuSchema映射到一个MongoDB collection并定义这个文档的构成(var stuModle = mongoose.model(‘User’, stuSchema, ‘user’)) 这里注意点三个参数,如果不加会自动把collection定义成复数形式
  1. 增删改查操作
  • 查找数据 (stuModle.find({条件}), fn)
  • 增加数据 ( new UserModel({}).save())
  • 删除数据 (UserModel.deleteOne({条件}, fn)) remove
  • 修改数据 (UserModel.updateOne({条件}, fn))

模式(Schemas)

支持的字段类型
类型作用
String定义字符串
Number定义数字
Date定义日期
Buffer定义二进制
Boolean定义布尔值
Mixed定义混合类型
ObjectId定义对象ID
Array定义数组

启动Node.js管理系统项目

  1. 建立github仓库
  2. 利用Express分别构建WebServer与APIServer

启动MongoDB

官网下载)(安装教程先创建一个项目 里面包含data文件,复制data文件路径,找到安装MongoDB的路径 找到bin文件 cmd 输入命令mongod --dbpath=复制的data文件路径

启动MongoDB后打开可视化工具

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

半生过往

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

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

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

打赏作者

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

抵扣说明:

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

余额充值