mongodb基础笔记

mongodb笔记

安装启动

centos系统下

安装
sudo yum -y install mongodb mongodb-devel mongodb-server
启动
sudo systemctl start mongod
关闭
sudo systemctl stop mongod

mongodb数据库操作

js + 面向对象

前提条件

使用 mongo 客户端登录

数据库列表

show databases/dbs

进入数据库

use 数据库名称

显示当前数据库

db

创建数据库

插入数据即创建数据库

删除数据库

// 注意当前数据库到底是哪个
db.dropDatabase()

数据库集合(表)操作

列出所有集合

show collections

创建集合

// 必须到数据库中
db.createCollection("集合名称")
// 或
// 插入数据即创建集合

修改集合名称

db.集合名.renameCollection('新集合名')

删除集合

db.集合名.drop()

数据操作

创建数据

db.集合名.insert(字典)
// 批量创建数据
data = [
  {
    "name":"a同学",
    "age":50
  },
  {
    "name":"小艾同学",
    "age":100
  }
]
db.mycoll2.insertMany(data)

更新数据

默认更新是整体更新,需要添加 $set 设置局部更新内容,默认情况下只更新 1 条数据,需要添加批量更新,需要添加更新方式 multi 设置 true

db.stu.update(
	//  更新条件	
  	{
    	"hometown":"蒙古"
  	},
  	// 更新内容
  	{
    	"name":"播客"
  	}
)
// 局部更新
db.stu.update(
	//  更新条件	
  	{
    	"hometown":"桃花岛"
  	},
  	// 更新内容
  	{
      	"$set":{
          // 局部更细内容
          "name":"python2"
      	}
  	}
)
// 批量局部更新
db.stu.update(
	//  更新条件	
  	{
    	"hometown":"大理"
  	},
  	// 更新内容
  	{
      	"$set":{
          // 局部更细内容
          "name":"Python3"
      	}
  	},
  	// 设置更新方式
  	{
      	// 设置成批量更新
     	"multi":true
  	}
)

保存数据

_id 表示数据主键,必须存在,如果不存在自动生成一个,手动设置

寻找 是否 有 _id 数据如果有就更新,如果没有就创建,保存的依据 _id

db.stu.save({"_id":1233456,'ccc':"xxxx1"})

删除数据

db.stu.remove(
	// 删除条件
  	{
      	"hometown":"桃花岛"
  	}
)
// 设置删除方式
db.stu.remove(
	// 删除条件
  	{
      	"hometown":"大理"
  	},
  	// 设置删除方式
  	{
      	"justOne":true
  	}
)
// 清空数据
db.stu.remove({})

查询数据

基本查询

如果同时存在两个条件,这两个条件必须同时满足 并且

db.集合名.find().pretty()
// 条件查询
db.stu.find(
	// 设置查询条件
  	{
      	"hometown":"蒙古",
      	"age":20
  	}
)
比较运算符

$gt ,$gte,$lt,$lte,$ne

db.stu.find(
	{
      	"age":{"$gt":20}
	}
)
逻辑运算符

并且 默认

使用关键字$or

db.stu.find(
	{
      	"$or":[
            {
              "hometown":"蒙古"
            },
            {
              "age":18
            }
      	]
	}
)
范围运算符

$in,$nin

db.stu.find(
	{
      	"hometown":{"$nin":['蒙古','桃花岛']}
	}
)
正则表达式
db.stu.find(
	{
      	// 在js中使用正则表达式 /正则表达式/
      	"name": /^黄/
	}
)
// 或 使用关键字  $regex
db.stu.find(
	{
      	"name":{"$regex":"^黄"}
	}
)
自定义查询

使用 $where 关键字 设置自定义查询函数

db.stu.find(
	{
      	"$where": function() {
        	// 1. 内部有一个 this 关键字指向当前记录
          	// 2. 返回值必须是 boolean 值,true 表示 符合条件,false 表示 不符合条件
          	if (this.age > 20) {
              	return true
          	} else {
              	return false
          	}
      	}
	}
)
limit 和 skip

limit 获取记录数

skip 跳过记录数

limit 和 skip 没有先后顺序,先 skip 再 limit 不管先后

db.stu.find().limit(2).skip(1)
db.stu.find().skip(1).limit(2)
投影

控制显示字段

字段设置为 1 表示显示字段,默认情况下 _id 显示,可以手动设置 _id0表示隐藏_id

db.stu.find(
	// 查询条件
  	{},
  	// 投影条件
  	{
      	"name":1,
      	"age":1,
      	"_id":0
  	}
)

排序

1 表示升序

-1 表示降序

db.stu.find().sort(
  	// 设置排序条件
  	{
      	"age":-1
  	}
)
统计个数
db.stu.find().count()
// 或者
db.stu.count({})
消除重复
db.stu.distinct(
	// 设置去重字段
  	"hometown",
  	// 设置查询条件
  	{
      	"age":{$gt:18}
  	}
)

聚合(aggregate)

聚合 主要用于统计数据(求最大值,求最小值,求平均值等等)

find 主要用于查询数据

聚合格式写法

db.stu.aggregate([
  	{
      管道名: {表达式}
    },
  	{
      管道名: {表达式}
  	},
  	...
])


group 管道

对数据进行分组,统计

db.stu.aggregate([
  	{
      "$group": {
       	// "_id" 固定值 设置分组,设置字段,注意:前面必须添加 `$`
        // 注意: "_id" 如果设置为 null 表示把所有数据作为 一组
        "_id":null,
        // "_id":"$hometown",
        // 编写表达式
        // $sum 表示求数量
        // "求最大值":{$sum:1},
        // $avg 求平均值
        // "求平均年龄":{$avg:"$age"},
       	// $max 求最大值
        "求最大年龄":{$max:"$age"},
        // $min 求最小值
        // "求最小年龄":{$min:"$age"},
        // $push 把分组中的数据放入到列表中
        // 特殊的值 $$ROOT 把整条数据记录放入到列表中
        // "来地区的人物": {$push:"$name"}
        // "xxx": {$push:"$$ROOT"}
      }
    }
])

match 管道

查询过滤数据

db.stu.aggregate([
  	{
      "$match": {
        // 写法和find查询条件一样
        "age":{$gt:20}
      }
    },
  	{
      "$group":{
        "_id":null,
        "最大年龄":{$max:"$age"}
      }
	}
])

project 管道

和投影一样

db.stu.aggregate([
  	{
      "$match": {
        // 写法和find查询条件一样
        "age":{$gt:20}
      }
    },
  	{
      "$group":{
        "_id":null,
        "最大年龄":{$max:"$age"}
      }
	},
  	{
      // 内容写法和投影写法一样
      "$project":{
        "_id":0,
        "最大年龄":1
      }
  	}
])

sort管道

db.stu.aggregate([
  	{
      "$match": {
        // 写法和find查询条件一样
        "age":{$gt:20}
      }
    },
  	{
      "$sort":{
        // 和 sort语法一样 1 表示升序,-1 表示降序
        "age":-1
      }
  	}
])

limit管道 和 skip管道

管道 limit 和 skip 有先后顺序

db.stu.aggregate([
  {
    "$match":{
      "age":{$gte:18}
    }
  },
  {
    "$skip":1
  },
  {
    "$limit":2
  }
])

unwind 管道

数据拆分,默认情况下忽略 值为空,空列表,null,字段不存在的数据

db.t2.aggregate([
  {
    "$unwind":"$vals"
  }
])
// 设置不忽略为空,为null的情况
db.t2.aggregate([
  {
    "$unwind":{
      "path":"$vals",
      "preserveNullAndEmptyArrays":true
    }
  }
])

索引

for (var i = 0;i < 100000;i ++) {
  db.test3.insert({
    "name":"abc"+i,
    "idx":i
  })
}
// 查询数据
db.test3.find(
	{
      "name":"abc99999"
	}
).explain('executionStats')
// 添加索引
db.test3.ensureIndex(
	// 设置索引字段
  	{
      	"name":1
  	}
)
// 查看当前集合的索引 
db.test3.getIndexes()
// 删除索引
db.test3.dropIndex('索引名称')

权限管理

必须先创建 超级管理员 账号,一旦创建成功就生效,再创建超级管理员账号是无法创建

use admin
db.createUser(
	{
      	"user":"python",
      	"pwd":"123456",
      	"roles":['root']
	}
)

登录

use admin
db.auth('用户名','密码')

创建普通用户账号并且携带访问权限

// 前提必须是超级管理员登录
use admin
db.createUser(
	{
      	"user":"db03",
      	"pwd":"123456",
      	"roles":[
          {
            "db":"db03",
            // write,read,readWrite
            "role":"readWrite"
          }
      	]
	}
)

列出当前所有用户

show users

删除用户

// 前提必须是超级管理员登录
use admin
db.dropUser('用户名')

备份 mongodump和mongorestore都是在终端上运行而不是在mongo客户端运行

	mongodump -h dbhost -d dbname -o dbdirectory

​ mongodump -h 127.0.0.1 -d my_mongo -o ~/Desktop

恢复

​ mongorestore -h dbhost -d dbname --dir dbdirectory

​ mongorestore -h 127.0.0.1 -d my_mongo --dir ~Desktop/my_mongo

定时备份

crontab 定义执行脚本备份数据库

# mysql 定时备份脚本
mysqldump -u用户名 -p密码 cslized | gzip > /data/backup/bks/cslized_$(date +%Y%m%d_%H%M%S).sql.gz

# mongodb 定时备份脚本
mongodump -h dbhost -d dbname -o dbdirectory | gzip > /data/backup/bks/cslized_$(date +%Y%m%d_%H%M%S).sql.gz

# 测试数据
db.stu.drop()
db.stu.insert({_id : 1, name:'郭靖',hometown:'蒙古',age:20,gender:true})
db.stu.insert({_id : 2, name:'黄蓉',hometown:'桃花岛',age:18,gender:false})
db.stu.insert({_id : 3, name:'华筝',hometown:'蒙古',age:18,gender:false})
db.stu.insert({_id : 4, name:'黄药师',hometown:'桃花岛',age:40,gender:true})
db.stu.insert({_id : 5, name:'段誉',hometown:'大理',age:16,gender:true})
db.stu.insert({_id : 6, name:'段王爷',hometown:'大理',age:45,gender:true})

猜你喜欢

转载自blog.csdn.net/QQ128619/article/details/100065468