显示所有的数据库
show dbs
创建新的数据库
newdb为数据库名字
use newdb
删除数据库
db.dropDatabase()
展示newdb数据库里面所有的集合
show collections
删除集合
db.user.drop()
插入数据
user 为集合的名字
db.user.insertOne({'name': 'lys', age: 18})
查找数据
// 精准查找
db.user.find({age: 18})
// 大于18岁 greater than ----> $gt
// 大于等于 greater than equal ---> $gte
db.user.find({age: {$gt: 18}})
// 小于18岁 less than -----> $lt
// 小于等于18岁 less than equal -----> $lte
db.user.find({age: {$lt: 18}})
// 大于18,小于25
db.user.find({age: {$gt: 18, $lt: 25}})
// 正则模糊查找
db.user.find({name: /ly/})
// 查找以l开头的
db.user.find({name: /^l/})
// 查询指定列
db.user.find({}, {name: 1})
// 排序 1为升序, -1是降序
db.user.find().sort({age: 1})
db.user.find().sort({age: -1})
// 查询前五条数据
db.user.find().limit(3)
// 查询3条之后的数据
db.user.find().skip(3)
// 查询一共多少条数据
db.user.find().count()
// or 查询
db.user.find({$or: [{age: 5}, {age: 10}]})
// 查找第一条数据
db.user.findOne()
修改数据
// 修改数据
db.user.updateOne({"name": "lys2"}, {$set: {"name": "lys100"}})
// 修改多条数据
db.user.updateMany({"name": "lys11111"}, {$set: {"name": "lys1"}})
删除文档
// 删除多条文档 3.2版中的新功能
db.user.deleteMany({name: 'lys0'})
// 删除一条文档 3.2版中的新功能
db.user.deleteOne({name: 'lys0'})
// 删除集合中所有的文档
db.user.deleteMany({})
索引
// 详细的看到具体的时间,可以查看这个字段 executionTimeMillis 代表毫秒
db.user.find({"name": "lys20"}).explain('executionStats')
// 查看当前集合是否有索引
db.user.getIndexes()
// 创建升序索引 1 是升序, -1 是降序
db.user.createIndex({name: 1})
// 或者
db.user.ensureIndex({"name": 1})
// 创建复合索引,这里列出字段的顺序很重要,如果单独搜索age是不行的
db.user.createIndex({name: 1, age: 1})
// 删除索引
db.user.dropIndex({name: 1})
账户权限配置
角色:root dbOwner dbAdmin userAdmin
// 创建超级管理员账户
db.createUser({user: 'admin', pwd: '123456', roles: [{role: 'root', db: 'admin'}]})
// 只能访问当前数据库
use nowDB
db.createUser({user: 'zhangsan', pwd: '123456', roles: [{role: 'dbOwner', db: 'nowDB'}]})
// zhangsan
db.dropUser('zhangsan')
如果你使用配置文件启动mongod,则在配置文件中增加security.authorization设置
配置文件路径:/usr/local/etc/mongod.conf
security:
authorization: enabled
重启
brew services restart mongodb-community
重新链接
// xxxx 是创建用户的数据库的名字
mongosh xxxx -u admin -p '123456'
可视化工具的链接connection 格式
mongodb://zhangsan:123456@localhost:27017/?authSource=nowDB&readPreference=primary&appname=MongoDB%20Compass&directConnection=true&ssl=false
聚合管道
对集合中的文档进行变换和组合
实际项目: 表关联查询,数据的统计
db.order_item.insertOne({order_id: 3, title: '牛奶6', price: 50, num: 1})
// $project 查询指定的字段
db.order.aggregate([{$project: {order_id: 1, all_price: 1}}])
// $match 操作 类似于find操作
db.order.aggregate([
{$project: {order_id: 1, all_price: 1}},
{
$match: {
'all_price': {$gte: 120}
}
}
])
// $group 将集合中的文档进行分组 可用于统计结果
db.order_item.aggregate([
{
$group: {
_id: "$order_id",
total: {$sum: '$num'}
}
}
])
// $sort 排序
db.order_item.aggregate([
{
$sort: {
"price": -1
}
}
])
// $limit + $skip 分页操作
// $lookup
/*
from: 跟哪个集合关联
localField:
*/
db.order.aggregate([
{
$lookup: {
from: "order_item",
localField: "order_id",
foreignField: "order_id",
as: "items"
}
}
])
// 数据库的备份和还原
mongodump -h 127.0.0.1 -d nowDB -o /Users/lys/beifen-db -u zhangsan -p '123456'
mongorestore -h 127.0.0.1 -d nowDB -o /Users/lys/beifen-db -u zhangsan -p '123456'