1.核心概念
- 数据库(database):数据库是一个数据仓库,数据库服务下可以创建很多数据库,数据库中可以存放很多集合
- 集合(collection):集合类似于JS中的数组,在集合中可以存放很多文档
- 文档(document):文档是数据库中的最小单位,类似于JS中的对象
2.下载安装与启动
-
下载地址:https://www.mongodb.com/try/download/community-kubernetes-operator
-
配置步骤:
- 将压缩包移动到
C:\Program Files
下,然后解压 - 创建
C:\data\db
目录,mongodb会将数据默认保存在这个文件夹 - 以mongodb中bin目录作为工作目录,启动命令行
- 运行命令
mongod
图片 - 客户端连接本机的mongodb服务,运行命令
mongo
图片 - 配置环境变量,方便任意窗口使用mongodb;将bin目录配置到环境变量path中
注意: 不要选中服务端窗口的内容,选中会停止服务,可以敲回车取消选中
- 将压缩包移动到
3.数据库与集合命令
3.1 数据库命令
- 显示所有数据库
show dbs
- 切换到指定的数据库,如果数据库不存在则会自动创建数据库
use 数据库名
- 显示当前所在的数据库
db
- 删除当前数据库
use 数据库名
db.dropDatabase()
集合命令: - 创建集合
db.createCollection('world')
- 显示当前数据库所有集合
show collections
- 删除某个集合
db.集合名.drop()
- 重命名集合
db.集合名.renameCollection('新集合名')
3.2 文档命令
-
插入文档
``db.集合名.insert(文档对象)·· -
查询文档
db.集合名.find(查询条件)
_id是mongodb自动生成的唯一编号,用来唯一标识文档
-
更新文档
db.集合名.update(查询条件,新的文档)
会用新文档直接替代全部旧文档的内容
db.集合名.update({name:'张三'},{$set:{age:33})
只更新特定属性的值
-
删除文档
db.集合名.remove(查询条件)
4.mongoose使用
mongoose版本 ^7.6.3
4.1 连接数据库
// mongoose版本 ^7.6.3 ,其他版本可参考mongoose文档 https://mongoose.nodejs.cn/docs/index.html
const mongoose = require('mongoose')
mongoose.connect('mongodb://127.0.0.1:27017/test') //连接test这个集合,没有test集合则创建test集合
//mongoose.connection.once once 只连接一次
mongoose.connection.on('open',()=>{
console.log('连接成功');
})
mongoose.connection.on('error',()=>{
console.log('连接失败');
})
mongoose.connection.on('close',()=>{
console.log('连接关闭');
})
4.2 创建新文档
const mongoose = require('mongoose')
mongoose.connect('mongodb://127.0.0.1:27017/test')//连接test这个集合,没有test集合则创建test集合
//mongoose.connection.once once 只连接一次
mongoose.connection.on('open',()=>{
console.log('连接成功');
// 创建文档的结构对象
let BookSchema = new mongoose.Schema({
name:String,
age:Number,
sex:String
})
// 创建模型对象,对文档操作的封装对象
let BookSModel = mongoose.model('books',BookSchema)
// 新增
BookSModel.create({
name:'xiaoming',
age:23,
sex:'男'
}).then(res=>{
console.log(res);
}).catch(err=>{
console.log(err);
})
})
mongoose.connection.on('error',()=>{
console.log('连接失败');
})
mongoose.connection.on('close',()=>{
console.log('连接关闭');
})
4.3 字段类型
类型 | 描述 |
---|---|
String | 字符串 |
Number | 数字 |
Boolean | 布尔值 |
Array | 数组,也可以使用[] 来表示 |
Date | 日期 |
Buffer | Buffer对象 |
Mixed | 任意类型,需要使用mongoose.Schema.Types.Mixed 指定 |
ObjectId | 对象ID,需要使用mongoose.Schema.Types.ObjectId 指定 |
Decimal128 | 高精度数字,需要使用mongoose.Schema.Types.Decimal128 指定 |
4.4 增删改查文档
const mongoose = require('mongoose')
mongoose.connect('mongodb://127.0.0.1:27017/test')
//mongoose.connection.once once 只连接一次
mongoose.connection.on('open', () => {
console.log('连接成功');
// 创建文档的结构对象
let BookSchema = new mongoose.Schema({
name: String,
age: Number,
sex: String,
is_hot: Boolean,
arr: Array
})
// 创建模型对象,对文档操作的封装对象
let BookSModel = mongoose.model('noves', BookSchema)
// 新增
let data = [
{
name: 'xiaoming',
age: 23,
sex: '男',
is_hot: true,
arr: [
1, 2, 3
]
}, {
name: 'xiaobai',
age: 26,
sex: '女',
is_hot: true,
arr: [
4, 5
]
}, {
name: 'xiao1',
age: 26,
sex: '女',
is_hot: false,
arr: [
4, 5
]
},
{
name: 'xiao2',
age: 26,
sex: '女',
is_hot: false,
arr: [
4, 5
]
}
]
BookSModel.insertMany(data).then(res => {
console.log(res);
}).catch(err => {
console.log(err);
})
// 删除单条
// BookSModel.deleteOne({ _id: '657ffc52c123a96ba890ea75'}).then(res=>{
// console.log('res--->',res);
// })
// 批量删除
// BookSModel.deleteMany({ age: 23}).then(res=>{
// console.log('res--->',res);
// })
// 更新文档,更新一条
// BookSModel.updateOne({name:'xiaobai'},{arr: ['hello']}).then(res=>{
// console.log('res--->',res);
// })
// 批量更新
// BookSModel.updateMany({ name:'xiaobai'},{age:18}).then(res=>{
// console.log('res--->',res);
// })
// 读取文档
// BookSModel.findOne({ name:'xiao1'}).then(res=>{
// console.log('res--->',res);
// })
// BookSModel.findById('658001b0d56b0d19db15c768').then(res=>{
// console.log('res--->',res);
// })
BookSModel.find({arr:['hello']}).then(res=>{
console.log('res--->',res);
})
// BookSModel.find().then(res=>{
// console.log('res--->',res);
// })
})
4.4 条件控制
4.4.1 运算符
在mongodb不能适应< > = 等运算符,需要使用替代符合
>
使用$gt
<
使用$lt
>=
使用$gte
<=
使用$lte
!==
使用$ne
示例:
BookSModel.find({age:{$lt:24}}).then(res=>{
console.log('res--->',res);
})
4.4.2 逻辑运算
$or
逻辑或$and
逻辑与
示例:
BookSModel.find({$or:[{name:'xiaoming'},{age:26}]}).then(res=>{
console.log('res--->',res);
})
4.4.3 正则匹配
可以使用js的正则语法,通过正则可进行模糊查询
示例:
BookSModel.find({name:/1/}).then(res=>{
console.log('res--->',res);
})
4.5 个性化读取
- 字段筛选
// 字段筛选 0 不要的字段,1 要的字段
BookSModel.find().select({name:1,age:1,sex:1}).then(res=>{
console.log('res--->',res);
})
- 数据排序
// 数据排序 1 升序 , -1 降序
BookSModel.find().sort({age:-1}).then(res=>{
console.log('res--->',res);
})
- 数据截取
// 数据截取 skip跳过,limit限定
BookSModel.find().select({name:1,age:1,sex:1}).skip(2).limit(3).then(res=>{
console.log('res--->',res);
})