创建并使用personDb数据库
use personDb
连接数据库
// 远程
mongo 192.168.1.1:7080
// 本地
mongo
显示数据库
show dbs
删除数据库
db.dropDatabase()
显示表
show collections
删除表
db.user.drop()
新增数据
// 新增单条数据
db.user.insert({
name: "jack",
age: 23,
sex: "男"
})
db.info.insert({
eCard: "320123456",
phone: "14725836978",
address: "china"
})
// 新增多条数据
for(var i=0;i<100;i++){
db.user.insert({
name: 'jack' + i,
age: i,sex: "男"
})
}
删除数据
// 删除名字是Jack的
db.user.remove({
name: "jack"
})
// 删除年龄大于22的
db.user.remove({
age: {$gt: 22}
})
// 只删除多个数据中的一条
db.user.remove({
name: "jack"
},{
justOne: true
})
查找数据
// 查全部
db.user.find()
// 查名字是jack,sex是男
db.user.find({
name: "jack",
sex: "男"
})
// 大于20
db.user.find({
age: {$gt: 20}
})
// 大于等于20
db.user.find({
age: {$gte: 20}
})
// 小于20
db.user.find({
age: {$lt: 20}
})
// 小于等于
db.user.find({
age: {$lte: 20}
})
// 大于等于10并且小于等于20
db.user.find({
age: {$gte: 20, $lte: 10}
})
// 模糊查询(包含)
// 匹配jack
db.user.find({
name: /jack/
})
// 匹配以j开头
db.user.find({
name: /^j/
})
// 匹配以k结尾
db.user.find({
name: /k$/
})
// age小于等于10且只查name,age字段
db.user.find({
age: {$lte: 10}
},{
name: 1,
age: 1
})
// 年龄升序排序
db.user.find().sort({
age: 1
})
// 年龄降序排序
db.user.find().sort({
age: -1
})
// 查询前5条数据
db.user.find().limit(5)
// 查询10条以后的数据
db.user.find().skip(10)
// 查询10条之后的数据中前五条数据
db.user.find().skip(10).limit(5)
// 实际应用--------分页
db.user.find().skip((page - 1) * pageSize).limit(pageSize)
// 统计表中数据量
db.user.find().count()
// or------- 查name为jack或者age大于10的数据
db.user.find({
$or: [{
name: "jack"
},{
age: { $gt: 10}
}]
})
聚合管道
// 用于表关联查询和数据统计
db.user.aggregate([
{
// $project: 指定查出的字段 (增加 删除 重命名字段)
$project: {
name: 1
}
},
{
// $match: 条件匹配,相当于where
$match: {
age: {$gt: 10}
}
},
{
// $limit: 限制数量
$limit: 1
},
{
// $skip: 跳过数量
$skip: 3
},
{
// $sort: 条件排序
$sort: {
name: -1
}
},
{
// $group: 分组统计
$group: {
id: "$sex", // 以xxx进行分组
total: {$sum: "$age"} // 以xxx进行统计
}},
{
// $lookup: 引入其他集合的数据(表关联查询)
$lookup: {
from: "info", // 和什么表关联
localField: "phone", // 表一关联字段
foreignField: "phone", // 表二关联字段
as: 'phones' // 重命名
}}
])
// 查询年龄大于5,第十条之后的5条数据,按年龄降序排序,显示name和sex字段
db.user.aggregate([
{$project:{name: 1, sex: 1}},
{$match: {age: {$gt:5}}},
{$sort: {age: -1}},
{$skip: 3},
{$limit: 2},
])
// 连表查询
db.user.aggregate([
{
$lookup: {
from: "info",
localField: "phone",
foreignField: "phone",
as: 'items'
}
}
])
修改数据
// 修改name为jack的数据为mike
db.user.update({
name: "jack"
}, {
$set: {
name: "mike"
}
})
// 给name为jack,年龄23的数据新增一个字段
db.user.update({
name: "jack",
age: 23
},{
$set: {
chinaName: "杰克"
}
})
// 修改name为jack,年龄23数据的sex和age字段
db.user.update({
name: "jack",
age: 23
},{
$set: {
sex: "女",
age: 10
}
})
// 修改name为jack的全部数据为mike
db.user.update({
name: "jack"
}, {
$set: {
name: "mike"
}
},{
multi: true
})
索引
// 获取当前表的索引
db.user.getIndexes()
// 创建索引
db.user.ensureIndex({
name: 1
})
// 删除索引
db.user.dropIndex({
name: 1
})
// 复合索引
// 复合索引必须全部匹配或者第一个匹配才能命中索引,第二个就不能命中
db.user.ensureIndex({
name: 1,
age: 1
},{
name: "name&age" // 重命名
})
// 唯一索引
db.user.ensureIndex({
age: 1
},{
'unique': true //添加唯一索引后,索引字段相同的数据无法添加
})
db.user.insert({ // 因为不存在改数据,可以添加
name: 'lucy',
age: 10
})
db.user.insert({ // 因为已存在改数据,无法添加,报错
name: 'lucy',
age: 10
})
权限管理
// 创建超级管理员
切换到personDB数据库:use personDB
db.createUser({
user: "admin",
pwd: "123456",
roles: [{
role: "root",
db: "personDB"
}]
})
// 创建管理员
db.createUser({
user: "Mike",
pwd: "123456",
roles: [{
role: "dbOwner",
db: "personDB"
}]
})
// 查看可以访问数据库的用户
show users
// 删除可以访问数据库的用户
db.dropUser("admin")
// 更新密码
db.updateUser( "admin", { pwd: '456789' })
// 权限认证
db.auth("admin","123456")
// 在配置文件中开启权限
文件:MongoDB\Server\4.0\bin\mongod.cfg
开启:security: authorization: enabled
// 重启数据库后就必须账号登录
mongo 数据库名 -u 用户名 -p 密码
mongo 192.168.1.1:7080/数据库名 -u 用户名 -p 密码
备份和还原
// 备份
mongodump -h 127.0.0.1 -d personDB -o 导出路径
// 还原
mongorestor -h 127.0.0.1 -d personDB 当前路径