当前位置: 首页 > news >正文

nodejs - MongoDB 学习笔记

一、简介

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、导入 mogooseconst 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/

相关文章:

nodejs - MongoDB 学习笔记

一、简介 1、MongoDB 是什么 MongoDB 是一个基于分布式文件存储的数据库&#xff0c;官方地址 https://www.mongodb.com/ 2、数据看是什么 数据库&#xff08;DataBase&#xff09;是按照数据结构来组织、存储和管理数据的应用程序。 3、数据库的作用 主要作用是 管理数据…...

photoshop学习笔记——移动工具

移动工具&#xff0c;可以对图层进行移动&#xff0c;快捷键 V 使用的素材已经放上了&#xff0c;直接下载即可 按住ctrl 可以自动选取&#xff0c;鼠标点击哪个对象&#xff0c;自动选中哪个图层 按住 shift 校正角度&#xff08;只能沿着直线移动&#xff09; 按住 alt 拖…...

HarmonyOS 质量、测试、上架速浏

1.应用质量要求&#xff1a; 1. 应用体验质量建议: 功能数据完备 功能完备 数据完备 基础体验要求 基础约束 兼容性 稳定性 性能 功耗 安全…...

TS的访问修饰符有哪些

如果你和我一样是从强类型语言(如C、C#、Java)转过来的&#xff0c;相信你会一眼就知道是什么 public&#xff08;默认&#xff09; - 全部可访问 protected - 自己和派生类可访问 private - 只有自己可访问 废话不多说&#xff0c;上代码&#xff1a; class Person {publ…...

网络安全之扫描探测阶段攻防手段(二)

扫描探测 扫描探测阶段是攻击者对目标网络进行深入了解的关键步骤&#xff0c;同时也是防御者识别潜在威胁和加强安全防护的机会。 攻击端&#xff1a;技术原理和工具 端口扫描&#xff1a; 原理&#xff1a;攻击者使用端口扫描工具来识别目标网络中开放的端口&#xff0c;这…...

C++:泛型算法了解

什么是泛型算法 泛型算法是C标准模板库&#xff08;STL&#xff09;中的一部分&#xff0c;它们表示的是可以用于不同类型的元素和多种容器类型的一些经典算法的公共接口。这些算法之所以被称为“泛型”&#xff0c;是因为它们可以操作在多种容器类型上&#xff0c;包括但不限…...

基于bert的自动对对联系统

目录 概述 演示效果 核心逻辑 使用方式 1.裁剪数据集 根据自己的需要选择 2.用couplet数据集训练模型 模型存储在model文件夹中 3.将模型转换为ONNX格式 4.打开index.html就可以在前端使用此自动对对联系统了。 本文所涉及所有资源均在传知代码平台可获取。 概述 这个生成器利用…...

js-vue中多个按钮状态选中类似于复选框与单选框实现

1.vue中多个按钮状态选中类似于复选框 在Vue中处理多个按钮的选中状态切换&#xff0c;通常我们会利用Vue的响应式数据系统来追踪每个按钮的选中状态。 html <div id"app"> <button v-for"button in buttons" :key"button.id" :c…...

ObservableCollection新增数据前判断数据是否存在

public class MyDataModel {public int Id { get; set; }public string Name { get; set; }}public static void Main(){// 创建 ObservableCollectionObservableCollection<MyDataModel> myDataCollection new ObservableCollection<MyDataModel>{new MyDataMode…...

DBus快速入门

DBus快速入门 参考链接&#xff1a; 中文博客&#xff1a; https://www.e-learn.cn/topic/1808992 https://blog.csdn.net/u011942101/article/details/123383195 https://blog.csdn.net/weixin_44498318/article/details/115803936 https://www.e-learn.cn/topic/1808992 htt…...

SQL Server 设置端口号:详细步骤与注意事项

目录 一、了解SQL Server端口号的基础知识 1.1 默认端口号 1.2 静态端口与动态端口 二、使用SQL Server配置管理器设置端口号 2.1 打开SQL Server配置管理器 2.2 定位到SQL Server网络配置 2.3 修改TCP/IP属性 2.4 重启SQL Server服务 三、注意事项 3.1 防火墙设置 3…...

Python面试题:结合Python技术,如何使用NetworkX进行复杂网络分析

NetworkX 是一个强大的 Python 库&#xff0c;用于创建、操作和研究复杂网络的结构、动力学和功能。它提供了丰富的功能来处理图和网络数据&#xff0c;适合用于复杂网络分析。以下是使用 NetworkX 进行复杂网络分析的基本步骤&#xff1a; 安装 NetworkX&#xff1a; pip inst…...

【C#/C++】C#调C++的接口,给C++传结构体数组

C#调C的接口&#xff0c;给C传结构体数组 1、背景2、实现 1、背景 C#软件创建了一个结构体数组用来存储图像的区域信息&#xff0c;分别是矩形框的左上像素的xy坐标和矩形框右下像素的xy坐标。需要传入给调用的C函数的参数列表中&#xff0c;我们选择使用C#传入一个结构体数组…...

ctfshow SSTI注入 web369--web372

web369 这把request过滤了&#xff0c;只能自己拼字符了 ""[[__clas,s__]|join] 或者 ""[(__clas,s__)|join] 相当于 ""["__class__"]举个例子&#xff0c;chr(97) 返回的是字符 a&#xff0c;因为 97 是小写字母 a 的 Unicode 编码…...

Llama + Dify,在你的电脑搭建一套AI工作流

theme: smartblue 点赞 关注 收藏 学会了 本文简介 最近字节在推Coze&#xff0c;你可以在这个平台制作知识库、制作工作流&#xff0c;生成一个具有特定领域知识的智能体。 那么&#xff0c;有没有可能在本地也部署一套这个东西呢&#xff1f;这样敏感数据就不会泄露了&…...

洛谷 P9854 [CCC 2008 J1] Body Mass Index

这题让我们计算出 BMI 值&#xff0c;随后判断属于哪个等级。 BMI 值计算公式&#xff1a; ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​ ​​​​​​​。 BMI 范围 对应信息 …...

Redis面试三道题目

针对Redis的面试题&#xff0c;我将从简单到困难给出三道题目&#xff0c;并附上参考答案的概要。 1. 简单题&#xff1a;请简述Redis是什么&#xff0c;以及它的主要优点。 参考答案&#xff1a; Redis简介&#xff1a;Redis是一个开源的、使用ANSI C语言编写、支持网络、可…...

redis的使用场景-分布式锁

使用redis的setnx命令放入数据并用此数据当锁完成业务&#xff08;但是如果用户操作途中出现异常导致超出指定时间会出现问题&#xff09; Service public class StockService {Autowiredprivate StockDao stockDao; //mapper注入Autowiredprivate StringRedisTemplate redisT…...

知识库系统全解析:2024年最佳9款

本文将分享9款优质团队知识库管理工具&#xff1a;PingCode、Worktile、石墨文档、语雀、Wolai 我来、有道云笔记、飞书文档、Confluence、Notion。 在追求高效团队运作的今天&#xff0c;掌握和整合知识成为了企业不可或缺的需求。但面对市场上琳琅满目的知识库管理工具&#…...

猫头虎分享:Numpy知识点一文带你详细学习np.random.randn()

&#x1f42f; 猫头虎分享&#xff1a;Numpy知识点一文带你详细学习np.random.randn() 摘要 Numpy 是数据科学和机器学习领域中不可或缺的工具。在本篇文章中&#xff0c;我们将深入探讨 np.random.randn()&#xff0c;一个用于生成标准正态分布的强大函数。通过详细的代码示…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...