mongoDB 数据库常用命令2021

276 阅读1分钟

显示所有的数据库

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'