MongoDB 学习笔记

news2024/11/15 8:11:28

一、简介

1、MongoDB 是什么

MongoDB 是一个基于分布式文件存储的数据库,官方地址 https://www.mongodb.com/

2、数据看是什么

数据库(DataBase)是按照数据结构来组织、存储和管理数据的应用程序。

3、数据库的作用

主要作用是 管理数据,对数据进行 增(c)、删(d)、改(u)、查(r)

4、数据库管理数据的特点

  1. 速度更快
  2. 扩展性更强
  3. 安全性更强

5、为什么选择 MongoDB

操作语法与 JavaScript 类似,容易上手,学习成本低

二、核心概念

  • 数据库(database):是一个数据仓库,数据库服务下可以创建很多数据库,数据库可以存放很多集合(类似于js中的数组)
  • 集合(collection):类似于 JS 中的数组,在集合中可以存放很多文档
  • 文档(document):是数据库中的最小单位,类似于js中的对象

在这里插入图片描述
JSON 文件示例:

{ 
	"accounts": [ 
		{ "id": "3-YLju5f3", "title": "买电脑", "time": "2023-02-08", "type": "-1", "account": "5500", "remarks": "为了上网课" },
		{ "id": "3-YLju5f4", "title": "请女朋友吃饭", "time": "2023-02-08", "type": "-1", "account": "214", "remarks": "情人节聚餐" },
	],
	"users":[ 
		{ "id": 1, "name": "zhangsan","age": 18 },
		{ "id": 2, "name": "lisi", "age": 20 },
		{ "id": 3, "name": "wangwu", "age": 22 } 
	] 
}

上面 json 文件中:

  • 一个 json 文件好比是一个 数据库,一个 MongoDB 服务下可以有 n 个数据库
  • json 文件中的 一级属性的数据值 好比是 集合(accounts、users)
  • 数组中的对象好比是 文档
  • 对象中的属性有时也称为字段

一般情况下:

  • 一个项目使用 一个数据库
  • 一个集合会存储同一种类型的数据

三、下载安装与启动

下载地址: https://www.mongodb.com/try/download/community

mac 参考 mongodb 下载安装
windows 参考 视频教程

mac 中全局变量配置完以后,mongod 启动服务的命令必须要在 bin 目录下才能使用,mongo 启动数据库命令,可以全局使用。

1、数据库命令

  1. 显示所有的数据库
    show dbs
  2. 切换到指定的数据库,如果数据库不存在会自动创建数据库
    use 数据库名
  3. 显示当前所在数据库
    db
  4. 删除当前数据库
    use 数据库名
    db.dropDatabase()

2、集合命令

  1. 创建集合
    db.createCollection('集合名称')
  2. 显示当前数据库中所有集合
    show collections
  3. 删除某个集合
    db.集合名.drop()
  4. 重命名
    db.集合名.renameCollection('newName')

3、文档命令

  1. 插入文档
    db.集合名.insert(文档对象)
    db.account.insert({name:'wangwu', age: 20})
  2. 查询文档
    db.集合名.find(查询条件)
    db.account.find({name:'wangwu'})
    没有查询条件,就查集合里面所有的文档
  3. 更新文档
    db.集合名.update(查询条件,新的文档)
    db.account.update({name:'lisi'},{name:'lisi222'})
    上面两个 新文档 会覆盖 旧文档
    db.集合名.update(查询条件, {$set:更新文档})
    db.account.update({name:'jeck'},{$set:{age:22}})
    上面命令是只修改某一项或多项,不会直接覆盖
  4. 删除文档
    db.集合名.remove(查询条件)
    db.account.remove({name:'lisi222'})

4、应用场景

4-1、新增

  • 用户注册
  • 发布视频
  • 发布商品
  • 发朋友圈
  • 发评论
  • 发微博
  • 发弹幕

4-2、删除

  • 删除评论
  • 删除商品
  • 删除文章
  • 删除视频
  • 删除微博

4-3、更新

  • 更新个人信息
  • 修改商品价格
  • 修改文章内容

4-4、查询

  • 商品列表
  • 视频列表
  • 朋友圈列表
  • 微博列表
  • 搜索功能

二、Mongoose

1、介绍

Mongoose 是一个对象文档模型库,官网 http://www.mongoosejs.net/添加链接描述

2、作用

方便使用代码操作 mongodb 数据库

3、使用流程

  1. 安装 mongoose npm install mongoose
  2. 导入 mongoose
// 导入 mongoose
// 1、导入 mogoose
const mongoose = require('mongoose')
const { type } = require('os')

// 2、连接 mongdb 服务器
mongoose.connect('mongodb://127.0.0.1:27017/bilibili')

// 3、设置回调
mongoose.connection.once('open', () => {
  // console.log('连接成功')
  // 4、创建文档的结构对象
  // let BookSchema = new mongoose.Schema({
  //   name: String,
  //   author: String,
  //   author_gemder: String,
  //   price: Number,
  //   is_hot: Boolean,
  //   tags: Array,
  //   create_time: Date
  // })

  // 字段校验
  let BookSchema = new mongoose.Schema({
      name: {
        type: String,     // 设置类型
        require: true,    // 设置必填项
        unique: true      //  设置唯一值
      },
      author: {
        type: String,     // 设置类型
        default: '佚名'   // 设置默认值
      },
      author_gemder: {
        type: String,
        enum: ['男', '女', '未知']  // 设置枚举值(值只能从这里取其一)
      },
      price: Number,
      is_hot: Boolean,
      tags: Array,
      create_time: Date
    })

  // 5、创建模型对象  对文档操作的封装对象(可以完成对文档的增删改查操作)
  // 第一个参数 book 是集合(数组)名称,第二个参数 BookSchema 是结构对象
  let BookModel = mongoose.model('book', BookSchema)
  // 6、新增基本对象
  // 如果属性跟上面定义的属性不统一,在写入数据库时会忽略这个键值对
  // 如果属性值的类型跟上面定义的类型不同意,写入时会报错,写入失败
  BookModel.create({
    name: '西游记',
    author: '吴承恩',
    price: 19.9,
    is_hot: true,
    tags: ['言情','都市','恐怖','玄幻'],
    create_time: new Date(),
    author_gemder: '男'
  })
  .then((data) => {
    // 输出成功后的文档对象
    console.log(data)
    // 7、关闭数据库连接(项目运行过程中,不会添加该代码)
    mongoose.disconnect()
  }).catch(res => {
    console.error('捕捉到了错误信息'+res)
  })
})

mongoose.connection.on('error', () => {
  console.log('连接失败')
})

mongoose.connection.on('close', () => {
  console.log('关闭连接')
})

// setTimeout(() => {
//   // 关闭数据库连接
//   mongoose.disconnect()
// }, 3000)

4、字段类型

文档结构可选的常用字段类型列表:
在这里插入图片描述

5、字段值验证

Mongoose 有一些内建验证器,可以对字段值进行验证

5-1、必填项

title: { 
	type: String, 
	required: true // 设置必填项 
},

5-2、默认值

author: { 
	type: String, 
	default: '匿名' //默认值 
},

5-3、枚举值

gender: { 
	type: String, 
	enum: ['男','女'] //设置的值必须是数组中的 
},

5-4、唯一值

username: { 
	type: String, 
	unique: true 
},

unique 需要 重建集合 才能有效果
永远不要相信用户的输入

6、增删改查

数据库基本操作包括四个,增加(create),删除(delete),修改(update),查(read),其操作都是在mongoose.connection.once('open', () => {})回调中进行的

6-1、增加

插入一条:

// 1、导入 mogoose
const mongoose = require('mongoose')

// 2、连接 mongdb 服务器
mongoose.connect('mongodb://127.0.0.1:27017/bilibili')

// 3、设置回调
mongoose.connection.once('open', () => {
  // console.log('连接成功')
  // 4、创建文档的结构对象
  let BookSchema = new mongoose.Schema({
    name: String,
    author: String,
    price: Number
  })
  // 5、创建模型对象  对文档操作的封装对象(可以完成对文档的增删改查操作)
  // 第一个参数 book 是集合(数组)名称,第二个参数 BookSchema 是结构对象
  let BookModel = mongoose.model('book', BookSchema)
  // 6、新增基本对象
  // 如果属性跟上面定义的属性不统一,在写入数据库时会忽略这个键值对
  // 如果属性值的类型跟上面定义的类型不同意,写入时会报错,写入失败

  
  BookModel.create({
    name: '西游记',
    author: '吴承恩',
    price: 19.9
  }).then((data) => {
    // 输出 插入成功后的文档对象
    console.log(data)
    // 7、关闭数据库连接(项目运行过程中,不会添加该代码)
    mongoose.disconnect()
  }).catch(res => {
    console.error('捕捉到了错误信息'+res)
  })
})

mongoose.connection.on('error', () => {
  console.log('连接失败')
})

mongoose.connection.on('close', () => {
  console.log('关闭连接')
})

// setTimeout(() => {
//   // 关闭数据库连接
//   mongoose.disconnect()
// }, 3000)

插入多条:

BookModel.insertMany([ 
	{ name:'华为', color:'灰色', price:2399, tags:['电量大','屏幕大','信号好'] },
	{ name:'小米', color:'白色', price:2099, tags:['电量大','屏幕大','信号好'] } ],(data)=>{ 
	console.log('写入成功');
	mongoose.connection.close(); 
})

6-2、删除

删除一条:

  BookModel.deleteOne({_id:'669f4719bbf7718b48b790ed'}).then((data) => {
    // 输出 插入成功后的文档对象
    console.log(data)
    // 7、关闭数据库连接(项目运行过程中,不会添加该代码)
    mongoose.disconnect()
  }).catch(res => {
    console.error('捕捉到了错误信息'+res)
  })

删除多条:

BookModel.deleteMany({is_hot: false}).then((data) => {
    // 输出 插入成功后的文档对象
    console.log(data)
    // 7、关闭数据库连接(项目运行过程中,不会添加该代码)
    mongoose.disconnect()
  }).catch(res => {
    console.error('捕捉到了错误信息'+res)
  })

6-3、文档更新

单条文档更新 BookModel.updateOne({}, {}).then()
多条文档更新BookModel.updateMany({}, {}).then()

//1. 安装 mongoose
//2. 导入 mongoose
const mongoose = require('mongoose');

//设置 strictQuery 为 true
mongoose.set('strictQuery', true);

//3. 连接 mongodb 服务                        数据库的名称
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');

//4. 设置回调
// 设置连接成功的回调  once 一次   事件回调函数只执行一次
mongoose.connection.once('open', () => {
  //5. 创建文档的结构对象
  //设置集合中文档的属性以及属性值的类型
  let BookSchema = new mongoose.Schema({
    name: String,
    author: String,
    price: Number,
    is_hot: Boolean
  });

  //6. 创建模型对象  对文档操作的封装对象    mongoose 会使用集合名称的复数, 创建集合
  let BookModel = mongoose.model('novel', BookSchema);

  //7. 更新文档
  // 更新单个文档 updateOne 接收两个参数,第一个是条件,第二个是新的对象
  // BookModel.updateOne({name: '西游记'}, {price: 9.9}).then((data) => {
  // // 输出 插入成功后的文档对象
  // console.log(data)
  // // 7、关闭数据库连接(项目运行过程中,不会添加该代码)
  // mongoose.disconnect()
  // }).catch(res => {
  // console.error('捕捉到了错误信息'+res)
  // )

  // 更新多个文档
  BookModel.updateMany({is_hot: false}, {is_hot: true}).then((data) => {
    // 输出 插入成功后的文档对象
    console.log(data)
    // 7、关闭数据库连接(项目运行过程中,不会添加该代码)
    mongoose.disconnect()
  }).catch(res => {
    console.error('捕捉到了错误信息'+res)
  })

});

// 设置连接错误的回调
mongoose.connection.on('error', () => {
  console.log('连接失败');
});

//设置连接关闭的回调
mongoose.connection.on('close', () => {
  console.log('连接关闭');
});

6-4、查询文档

查询一条数据:BookModel.findOne({name:'23'}).then()
根据 ID 查询数据BookModel.findById(‘’).then()
批量查询数据:BookModel.find({}).then()(有条件就根据条件查询,没条件就查所有的)

//1. 安装 mongoose
//2. 导入 mongoose
const mongoose = require('mongoose');

//设置 strictQuery 为 true
mongoose.set('strictQuery', true);

//3. 连接 mongodb 服务                        数据库的名称
mongoose.connect('mongodb://127.0.0.1:27017/bilibili');

//4. 设置回调
// 设置连接成功的回调  once 一次   事件回调函数只执行一次
mongoose.connection.once('open', () => {
  //5. 创建文档的结构对象
  //设置集合中文档的属性以及属性值的类型
  let BookSchema = new mongoose.Schema({
    name: String,
    author: String,
    price: Number,
    is_hot: Boolean
  });

  //6. 创建模型对象  对文档操作的封装对象    mongoose 会使用集合名称的复数, 创建集合
  let BookModel = mongoose.model('novel', BookSchema);

  //7. 读取文档
  // 按照条件读取文档
  BookModel.findOne({name:'狂飙'}).then((data) => {
    // 输出 插入成功后的文档对象
    console.log(data)
    // 7、关闭数据库连接(项目运行过程中,不会添加该代码)
    mongoose.disconnect()
  }).catch(res => {
    console.error('捕捉到了错误信息'+res)
  })

  // 通过 id 读取文档
  // BookModel.findById('669f4ef193ea628ad18eeb33')
  //.then((data) => {
  //  console.log(data)
  //  mongoose.disconnect()
  //}).catch(res => {
  // console.error('捕捉到了错误信息'+res)
  // })
  
  // 读取所有文档
  // BookModel.find().then((data) => {
  // console.log(data)
  // mongoose.disconnect()
  //}).catch(res => {
  // console.error('捕捉到了错误信息'+res)
  // })

});

// 设置连接错误的回调
mongoose.connection.on('error', () => {
  console.log('连接失败');
});

//设置连接关闭的回调
mongoose.connection.on('close', () => {
  console.log('连接关闭');
});

7、条件控制

7-1、运算符

在 mongodb 中不能使用 >, <, >=,<=,!==等运算符,需要使用替代符号

  • > 使用 $gt
  • < 使用 $lt
  • >= 使用 $gte
  • <= 使用 $lte
  • !== 使用 $ne
// 查询价格小于 20 的文档
BookModel.find({price:{$lt: 20}}).then((data) => {
    // 输出 插入成功后的文档对象
    console.log(data)
    // 7、关闭数据库连接(项目运行过程中,不会添加该代码)
    mongoose.disconnect()
  }).catch(res => {
    console.error('捕捉到了错误信息'+res)
  })

7-2、逻辑运算符

$or 逻辑或
$and 逻辑与

  // 逻辑运算 - 查询 name 为 余华 或者 刘慈欣 的文档
BookModel.find({$or: [{author: '余华'},{author: '刘慈欣'}]}).then((data) => {
    // 输出 插入成功后的文档对象
    console.log(data)
    // 7、关闭数据库连接(项目运行过程中,不会添加该代码)
    mongoose.disconnect()
  }).catch(res => {
    console.error('捕捉到了错误信息'+res)
  })

7-3、正则匹配

条件中可以直接使用 js 的正则语法,通过正则可以进行模糊查询

// 正则匹配 - 查询 name 包含 ‘三’ 的文档
BookModel.find({name: //})
BookModel.find({name: new RegExp('三')})

8、个性化读取

8-1、字段筛选

取前端需要展示的字段,_id 会默认取出来,,如果不需要,要设为 0

// 字段筛选(取某些字段,0 不要的字段,1 要获取的字段)
BookModel
.find()
.select({name: 1, author: 1, price: 1, _id: 0})
.then((data) => {
    // 输出 插入成功后的文档对象
    console.log(data)
    // 7、关闭数据库连接(项目运行过程中,不会添加该代码)
    mongoose.disconnect()
  }).catch(res => {
    console.error('捕捉到了错误信息'+res)
  })

8-2、数据排序

// 数据排序,1:升序,-1:倒序
BookModel
.find()
.select({name:1, price:1, _id: 0})
.sort({price: 1})
.then((data) => {
    // 输出 插入成功后的文档对象
    console.log(data)
    // 7、关闭数据库连接(项目运行过程中,不会添加该代码)
    mongoose.disconnect()
  }).catch(res => {
    console.error('捕捉到了错误信息'+res)
  })

8-3、数据截取

常用来做分页,skip 为 (页码 - 1) * limit 中的值

// 数据截取,limit 接收一个参数,为要截取的数据的长度,skip接收一个参数,表示在截取前,要跳过几个数据,常用作分页
  BookModel
  .find()
  .select({name:1, price:1, _id: 0})
  .sort({price: 1})
  .skip(3)
  .limit(3)
  .then((data) => {
    // 输出 插入成功后的文档对象
    console.log(data)
    // 7、关闭数据库连接(项目运行过程中,不会添加该代码)
    mongoose.disconnect()
  }).catch(res => {
    console.error('捕捉到了错误信息'+res)
  })

9、模块化

在这里插入图片描述
config.js

module.exports = {
 DBHOST: '127.0.0.1',
 DBPORT: '27017',
 DBNAME: 'bilibili'
}

db.js

module.exports = function (success, error = () => {console.log('连接失败了啊')}) {
  // 1、导入 mogoose
  const mongoose = require('mongoose')
  const { DBHOST, DBPORT, DBNAME } = require('../config/config')

  // 2、连接 mongdb 服务器
  mongoose.connect(`mongodb://${DBHOST}:${DBPORT}/${DBNAME}`)

  // 3、设置回调
  mongoose.connection.once('open', () => {
    success()
  })

  mongoose.connection.on('error', () => {
    error()
  })

  mongoose.connection.on('close', () => {
    console.log('关闭连接')
  })
}

BookModel.js

const mongoose = require('mongoose')

let MovieSchema = mongoose.Schema({
  name: String,
  director: String
})
let MovieModel = new mongoose.model('movie', MovieSchema)

module.exports = MovieModel

book.js

const db = require('./db/db')
const BookModel = require('./models/BookModel')

db(() => {
  BookModel.create({
    name: '阿勒泰',
    author: '阿勒泰',
    price: 88.8
  }).then((data) => {
    console.log(data)
    mongoose.disconnect()
  }).catch(res => {
    console.error('捕捉到了错误信息'+res)
  })
})

MovieModel.js

const mongoose = require('mongoose')

let MovieSchema = new mongoose.Schema({
  name: String,
  director: String
})
let MovieModel = mongoose.model('movie', MovieSchema)

module.exports = MovieModel

movie.js

const db = require('./db/db')
const MovieModel = require('./models/MovieModel')

db(() => {
  MovieModel.create({
    name: '第二十条',
    director: '张艺谋'
  }).then((data) => {
    console.log(data)
    mongoose.disconnect()
  }).catch(res => {
    console.error('捕捉到了错误信息'+res)
  })
})

四、图形化管理工具

我们可以使用图形化的管理工具来对 Mongodb 进行交互,这里演示两个图形化工具

  • Robo 3T 免费 https://github.com/Studio3T/robomongo/releases
  • Navicat 收费 https://www.navicat.com.cn/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Data Analytics for Business BISM7233

SSIS Task: Company_data.csv contains information for each of the companies, some of the state code information is missing in this table. You would need to use “state_code.csv” to fill in these blank cells under state code before creating the company dime…

利用OSMnx求路网最短路径并可视化(二)

书接上回&#xff0c;为了增加多路径的可视化效果和坐标匹配最近点来实现最短路可视化&#xff0c;我们使用图形化工具matplotlib结合OSMnx的绘图功能来展示整个路网图&#xff0c;并特别高亮显示计算出的最短路径。 多起终点最短路路径并计算距离和时间 完整代码#运行环境 P…

vite环境下使用bootstrap

环境 nodejs 18 pnpm 初始化 pnpm init pnpm add -D vite --registry http://registry.npm.taobao.org pnpm add bootstrap popperjs/core --registry http://registry.npm.taobao.org pnpm add -D sass --registry http://registry.npm.taobao.org新建vite.config.js cons…

【微服务】Spring Cloud Bus的注意事项和常用案例

文章目录 强烈推荐引言关键方面注意事项1. 消息代理选择2. 消息队列配置3. 消息持久化4. 幂等性5. 安全性6. 消息大小7. 性能监控8. 错误处理9. 版本兼容性10. 测试11. 配置同步12. 日志记录 常用示例示例 1: 配置同步配置服务器 (config-server)客户端服务 (client-service)触…

数据库的事务隔离级别有哪些?

并行事务会引发什么问题&#xff1f; 同时处理多个事务的时候&#xff0c;就可能出现脏读&#xff08;dirty read&#xff09;、不可重复读&#xff08;non-repeatable read&#xff09;、幻读&#xff08;phantom read&#xff09;的问题。脏读: 如果一个事务「读到」了另一个…

MQ消息队列+Lua 脚本实现异步处理下单流程,将同步下单改为异步下单

回顾一下下单流程&#xff1a; 用户发起请求 会先请求Nginx,Nginx反向代理到Tomcat&#xff0c;而Tomcat中的程序&#xff0c;会进行串行工作&#xff0c; 分为以下几个操作&#xff1a; 1 查询优惠券 2 判断秒杀库存是否足够 3 查询订单 4 校验是否是一人一单 5 扣减库…

Unity Shader - 2024 工具篇

目录 IDE 工具建议 IDE工具 Sublime 3 大势所趋&#xff0c;但是Sublime 使用插件还是相当的不习惯 代码跳转 Go to definite IDE 工具建议 () what is the best ide for coding shaderlab - #4 by DaveAstator - Unity Engine - Unity Discussions​​​​​​​I IDE工…

用Swagger进行后端接口测试的实战操作

目录 一.什么是Swagger&#xff1f; 二.Swagger的使用操作流程&#xff1a; 1.在pom.xml配置文件导入 Knife4j 的依赖&#xff1a; 2.在config配置类中加入 Knife4j 的相关配置并设置静态资源映射&#xff08;否则接口文档无法访问&#xff09;&#xff1a; 三.Swagger的四个…

案例研究|柯尼卡美能达软件开发(大连)有限公司基于DataEase构筑内部数据可视化体系

柯尼卡美能达软件开发&#xff08;大连&#xff09;有限公司于2007年5月25日注册成立。公司以“洞悉在工作的人们真实情况&#xff0c;探寻他们的愿望&#xff0c;持续提供使人们更加幸福的服务”为使命&#xff0c;致力于系统品质测试服务、软件开发服务、IT安全服务、高级BPO…

docker文件挂载和宿主主机文件的关系

一、背景 在排查docker日志时发现在读取docker的文件时找不到文件&#xff0c;在宿主主机上可以查到对应的文件。这里就要理解docker文件目录和宿主主机上的文件的关系。 二、Docker文件系统和宿主系统 Docker文件和宿主文件之间的关系主要体现在Docker容器的运行环境中。Docke…

C# 数组常用遍历方式

// 假设数组Point[] points new Point[2];// 第一种遍历 forfor (int i 0; i < points.Length; i){Point p points[i];Console.WriteLine($"X{p.X},y{p.Y}");}// 第二种遍历 foreachforeach (Point p in points){Console.WriteLine($"X{p.X},y{p.Y}"…

没有51基础,能不能学好STM32?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「STM32的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 我们通常准备攻读一本大部…

哪种小型内衣洗衣机好用?五款人气爆款机型不可错过

在日常生活中&#xff0c;内衣洗衣机已成为现代家庭必备的重要家电之一。选择一款耐用、质量优秀的内衣洗衣机&#xff0c;不仅可以减少洗衣负担&#xff0c;还能提供高效的洗涤效果。然而&#xff0c;市场上众多内衣洗衣机品牌琳琅满目&#xff0c;让我们往往难以选择。那么&a…

51单片机-第四节-定时器

一、定时器&#xff1a; 1.介绍&#xff1a; 单片机内部实现的计时系统。 作用&#xff1a;代替长时间Daley&#xff0c;提高cpu效率。 数量&#xff1a;至少2个&#xff0c;T0&#xff0c;T1&#xff0c;T2等。其中T0&#xff0c;T1为所有51单片机共有&#xff0c;T2等为不…

gitee设置ssh公钥密码频繁密码验证

gitee中可以创建私有项目&#xff0c;但是在clone或者push都需要输入密码&#xff0c; 比较繁琐。 公钥则可以解决该问题&#xff0c;将私钥放在本地&#xff0c;公钥放在gitee上&#xff0c;当对项目进行操作时带有的私钥会在gitee和公钥进行验证&#xff0c;避免了手动输入密…

Domainim:一款高效的企业级网络安全扫描工具

关于Domainim Domainim是一款功能强大的企业级网络安全扫描工具&#xff0c;该工具运行效率高&#xff0c;功能完善&#xff0c;可以帮助广大研究人员针对企业或组织网络执行大规模安全扫描任务。 该工具可以快速执行网络安全扫描和域名/子域名网络侦查任务&#xff0c;旨在使…

ES中的数据类型学习之ARRAY

Arrays | Elasticsearch Guide [7.17] | Elastic 中文翻译 &#xff1a;Array Elasticsearch 5.4 中文文档 看云 Arrays In Elasticsearch, there is no dedicated array data type. Any field can contain zero or more values by default, however, all values in the a…

使用MariaDB数据库管理系统

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、数据库管理系统 数据库是指按照某些特定结构来存储数据资料的数据仓库&#xff1b; 数据库管理系统是一种能够对数据库中存放的数据进行建立、修…

【电源专题】结合锂电池相关资料和华为手机聊聊锂离子电池使用条件限制

在文章:【电源专题】锂电池的特点和工作原理 中我们讲到了一些关于锂电池种类和特点、工作原理等。但是对于锂离子电池使用条件限制却没有介绍,本文基于手机产商 锂离子电池使用条件-电池性能和应用介绍 | 华为官网 (huawei.com)提供的介绍文档再次深入学习锂离子电池的一些特…

基于jeecgboot-vue3的Flowable流程仿钉钉流程设计器-发送信息服务处理

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、因为仿钉钉设计器里发送消息处理是一个服务任务&#xff0c;所以要根据这个服务任务进行处理 2、这里目前只对消息进行处理&#xff0c;就是用websocket的发送方式 输入相应的内容&…