nodejs - MongoDB 学习笔记

news2025/4/21 10:06:51

一、简介

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/1954241.html

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

相关文章

docker命令大全(新手必备)-my write

一、命令图谱 二、基本命令 docker version #显示版本信息 docker info #显示系统信息,包括镜像、容器数量 docker 命令 --help #帮助 三、镜像命令 3.1 docker images 查看本地主机上的镜像 docker images [OPTIONS] [REPOSITORY[:TAG]] 选项:-a …

【JavaEE初阶】Thread类及常见方法

目录 &#x1f4d5; Thread类的概念 &#x1f4d5; Thread 的常见构造方法 &#x1f4d5; Thread 的几个常见属性 &#x1f4d5; start()-启动一个线程 &#x1f4d5; 中断一个线程 &#x1f6a9; 实例一 &#x1f6a9; 实例二 &#x1f6a9; 实例三 &#x1f4d5; jo…

Pytorch深度学习实践(8)多分类任务

多分类问题 多分类问题主要是利用了Softmax分类器&#xff0c;数据集采用MNIST手写数据集 设计方法&#xff1a; 把每一个类别看成一个二分类的问题&#xff0c;分别输出10个概率 但是这种方法存在一种问题&#xff1a;不存在抑制问题&#xff0c;即按照常规来讲&#xff0c…

Python的文件操作介绍

一、编码格式介绍 1.1、常见的字符编码格式 1.2、Python字符编码格式 Python的解释器使用的是Unicode&#xff08;内存&#xff09; .py文件在磁盘上使用UTF-8存储&#xff08;外存&#xff09; #encodinggbkprint(你好&#xff0c;中国) 二、文件的读写原理 2.1、文件的…

Servlet1-Servlet程序、请求处理、继承体系

目录 什么是Servlet 手动实现Servlet程序 ​编辑url地址如何定位到Servlet程序去访问 Servlet的生命周期 ​编辑GET和POST请求的分发处理 通过继承HttpServlet类实现Servlet程序 IDEA菜单生成Servlet程序 Servlet类的继承体系 ServletConfig类 ServletContext类 什么…

Docker学习与实战

一、Docker安装 移除旧版本docker sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine配置docker yum源 sudo yum install -y yum-utils配置阿里云docker仓库 sudo y…

甄选范文“论软件测试中缺陷管理及其应用”软考高级论文,系统架构设计师论文

论文真题 软件缺陷指的是计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。缺陷的存在会导致软件产品在某种程度上不能满足用户的需要。在目前的软件开发过程中,缺陷是不可避免的。软件测试是发现缺陷的主要手段,其核心目标就是尽可能多地找…

Nvidia GPU驱动安装报错显卡与驱动不兼容(本身兼容)

最近在公司服务器上遇到了一个特别离谱的问题&#xff0c;就是在本身在nividia官网上面下载的匹配的显卡驱动&#xff0c;安装之后采用下面命令查看驱动显示&#xff1a; $ nvidia-smiNVIDIA-SMI has failed because it couldnt communicate with the NVIDIA driver. Make su…

exe4j 使用jar包 打包exe程序,并且自带jre

1. 准备工作 1) 程序jar包一个 2) jdk自带jre文件夹一个 3&#xff09;exe4j 程序 &#xff0c;自行搜索 我用的5.1 4&#xff09;图标&#xff08;icon&#xff09;文件一个&#xff0c;用来作为exe程序的图标 5&#xff09; 图片&#xff08;png/jpg等&#xff09;用来打开…

LeetCode 118.杨辉三角 C++写法

LeetCode 118.杨辉三角 C写法 思路&#x1f9d0;&#xff1a; 我们使用vector来进行解答&#xff0c;该题规律简单&#xff0c;观察一下就可以发现&#xff0c;下一行的非1部分是上一行相同下标与上一行相同下标的前一个数据的和。难一点的是数据存储方式&#xff0c;C语言需要…

相机怎么选(不推荐,只分析)

title: 相机怎么选 tags: [相机, 单反相机] categories: [其他, 相机] 最近准备购买&#xff0c;相机怎么选&#xff0c;我去搜索了许多文章&#xff0c;整理了一篇小白挑选技术篇&#xff0c;供大家参考。 分类 胶片相机 需要装入胶卷才能使用的相机&#xff0c;拍照后可直…

【网络安全】子域名模糊测试实现RCE

未经许可&#xff0c;不得转载。 文章目录 正文总结 正文 在之前测试一个私人项目时&#xff0c;我报告了admin.Target.com上的Auth Bypass漏洞&#xff0c;这将导致SQLI&RCE &#xff0c;该漏洞在报告后仅一天就被修复。 现在重拾该应用程序&#xff0c;对子域进行模糊测…

安德森四原则:从对称性破缺到复杂性涌现

中国物理学会期刊网 2023年06月20日 10:00 北京 以下文章来源于集智俱乐部&#xff0c;作者 Krakauer 导语 对称性破缺与复杂性的涌现有何关系&#xff1f;在几十年的研究进程中&#xff0c;诺奖得主、圣塔菲研究所发起人菲利普安德森&#xff08;Philip Anderson&#xff09…

十四、【Python】基础教程-【Python全掌握】六大基础数据类型:字典(dict)类型的终极指南

目录 一、字典&#xff08;dict&#xff09; 1. 创建字典 2. 访问元素 3. 添加元素 4. 修改元素 5. 删除元素 6. 检查键是否存在 7. 获取字典的键、值、项 8. 遍历字典 9. 更新字典 10. 复制字典 11. 字典推导式 12. 获取默认值 13. 弹出元素 14. 清空字典 15. …

第15周 Zookeeper分布式锁与变种多级缓存

Zookeeper **************************************************************

Verilog语言和C语言的本质区别是什么?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01; 用老石的一句话其实很好说…

前端八股文 promise async await 的理解

promise是什么 Promise 是异步编程的一种解决方案&#xff0c;比传统的解决方案——回调函数和事件——更合理和更强大。 目的 解析 吴优编程 &#xff08;解决异步编程中的嵌套问题的&#xff0c;将嵌套的格式 用peomise 写成同步&#xff09; promise.then() 是成功后继…

【人工智能】人工智能概论(一):人工智能基本概概念、学派、发展历程与新一代人工智能

文章目录 1. 人工智能的基本概念与定义2. 人工智能的主要学派及主旨思想2.1. 符号主义学派&#xff1a;AI源自数学逻辑2.2. 连接主义学派&#xff1a;AI源自仿生学2.3. 行为主义学派&#xff1a;AI源自控制论 3. 人工智能的起源及发展历程4. 驱动新一代人工智能快速发展的因素 …

橙单后端项目下载编译遇到的问题与解决

今天下载orange-admin项目&#xff0c;不过下载下来运行出现一些问题。 1、涉及到XMLStreamException的几个类都出现下面的错误 The package javax.xml.stream is accessible from more than one module: <unnamed>, java.xml ctrl-shift-t 可以找到这个引入是哪些包里…

C++泛型编程,函数模板和类模板

C模板 模板概念&#xff1a;泛型编程&#xff0c;将类型参数化&#xff0c;在编译阶段不指定参数类型&#xff0c;运行阶段动态获取参数的技术&#xff0c;C中分为函数模板和类模板 语法&#xff1a; template<typename T> template -- 声明创建模板 typename -- 表…