这里写自定义目录标题
一、mongodb
- mongodb NoSQL非关系数据库,C++编写
- 直接存储海量数据
二、安装
解压
tar zxf mongodb-linux-x86_64-debian10-5.0.3.tgz
# mongodb-linux-x86_64-debian10-5.0.3.tgz
创建文件夹
mkdir /usr/local/mongodb
cd mongodb-linux-x86_64-debian10-5.0.3/
mv * /usr/local/mongodb/
配置文件
export PATH=/user/local/mongodb/bin:$PATH
mkdir -p /usr/local/mongodb/data/db
mkdir -p /usr/local/mongodb/data/logs
sudo chown 'root' /usr/local/mongodb/data/db
sudo chown 'root' /usr/local/mongodb/data/logs
启动服务
./mongod -f mongodb.conf
mongod --dbpath /usr/local/mongodb/data/db --logpath /usr/local/mongodb/data/logs/mongod.log --fork
ps aux|grep mongod
export PATH=/user/local/mongodb/bin:$PATH
至此,输入mongo依旧找不到服务
然后
vim ~/.bash_profile
export PATH=/user/local/mongodb/bin:$PATH
source ~/.bash_profile
# 成功了。。。权限,这个是对于用户的
三、简单使用
1.数据库命令
db # 查看当前数据库,没有切换数据库的情况,默认使用test
show dbs # 查看所有数据库
use db_name # 切换数据库
show collections # 查看集合
db # 查看当前数据库
db。集合名.drop() # 删除集合
db.dropDatabase() # 删除当前数据库
2. 集合命令
db.createCollection("cap_col",{capped:tu=rue,size:10}) # capped:默认false不设上限,true有容量限制的
3. 数据类型
Object lD:文档ID/数据的ID,数据的主键.
String:字符串,最常用,必须是有效的UTF-8
Boolean:存储一个布尔值,true或false
lnteger:整数可以是32位或64位,这取决于服务器.
Double:浮点数
Arrays:数组/列表
Object: mongodb中的一条数据/文档,即文档嵌套文档。
Null:存储null值
Timestamp:时间戳,表示从1970-1-1到现在的总秒数. Date:存储当前日期或时间的UNIX时间格式
Object lD:
前4个字节为当前时间戳接下来3个字节的机器ID
接下来的2个字节中MongoDB的服务进程id
最后3个字节是简单的增量值
4. mongodb增删改查
插入数据
db.nor_col.insert({name:"yang",age:18,class:1,num:1})
db.nor_col.find()
# 批量插入
db.nor_col.insert([{name:"yang",age:18,class:1,num:1},{name:"li",age:21,class:2,num:1}])
db.nor_col.find()
保存
db.stu.save({_id:'22222',name:'gj',gender:2})
# 拿id查找有无数据
# 有,比较后两个数据:一样则不管;不一样,则修改
# 五:插入这个新数据
查询
db.stu.find()
等于:默认是等于判断,没有运算符
小于:$lt less than
小于等于:$lte less than equal
大于:$gt greater than
大于等于:$gte
不等于: $ne
与:and # 在json写多个条件
或:or #值为数组,数组中的每个元素为json
# 查询年龄大于18的所有学生
db.stu.find({age:{$gte:18}})
# 查询年龄大于18 或性别为男,且姓名gj
db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})
5. 范围运算
# $in 判断数据是否在某个数组里
# $nin
db.stu.find({age:{$in:[18,28,38]}})
6.正则查询
# 正则处理的是字符串
db.stu.find(name:{$regex:"hunag"})
7.自定义查询
db.stu.find({$where:fuction(){
return this.age>30}})
8. 查询结果
limit()
skip() # 跳过 优先级较高
sort() # 设定体条件前后 优先级
count() # 统计个数
distinct() # 去重
9. 更新
db.nor_col.update({num:9}, {name:"AAA"})
# 找到num是9的那条,更改名字为AAA
db.nor_col.update({name:"bbb"},{$set:{age:45}},{multi:true})
# 默认是修改第一条,muti为true全部都改了
四、 聚合
db.orders.aggregate({管道:{表达式}})
1. 常用管道命令
$group
db.stu.aggregate($group:{_id:"$gender".counter:{$sum:1}}})
# 找符合条件的,找到一条,加一条
$match
过滤文档
$sort
文档排序
$project
五、索引
复合索引不可去重
结合实际考虑是否需要唯一索引
六、权限
- 创建超级管理员
七、mongodb python交互
from pymongo import MongoClient
# 创建数据库链接对象
client = MongoClient('', 27017)
# 选择数据库
db = client['admin']
# 设置权限 db.authenticate('','')
# 选择一个集合
col = client['test']
done
解决:物理机ping不通虚拟机
- 开启VMware NAT service和VMware DHCP service服务。
- 重启V8网卡!!
from pymongo import MongoClient
# 创建数据库链接对象
client = MongoClient('ip', 27017)
# 选择数据库
db = client['test']
# 设置权限 db.authenticate('','')
# 选择一个集合
col = client['pydata']['test']
# 插入数据
# col.insert_one({"class": "pingan"})
# col.insert_one({"class": "1"})
# col.insert_many([{"class":"1"},{"class":"2"},{"class":"3"}])
for data in col.find():
print(data)
{'_id': ObjectId('619526230d0021a9f0306998'), 'class': 'pingan'}
{'_id': ObjectId('61960c873941b893f6f065cc'), 'class': '1'}
{'_id': ObjectId('61960d1786775b679c0ff6d7'), 'class': '1'}
{'_id': ObjectId('61960d1786775b679c0ff6d8'), 'class': '2'}
{'_id': ObjectId('61960d1786775b679c0ff6d9'), 'class': '3'}
# 更新
col.update({"class":"2"},{"message":"hello"})
for data in col.find():
print(data)
# 全文当覆盖更新
col.update({},{"$set":{"id":"xxx-xxx"}},multi=True)
for data in col.find():
print(data)
#
{'_id': ObjectId('619526230d0021a9f0306998'), 'class': 'pingan', 'id': 'xxx-xxx'}
{'_id': ObjectId('61960c873941b893f6f065cc'), 'message': 'hello', 'id': 'xxx-xxx'}
{'_id': ObjectId('61960d1786775b679c0ff6d7'), 'class': '1', 'id': 'xxx-xxx'}
{'_id': ObjectId('61960d1786775b679c0ff6d8'), 'message': 'hello', 'id': 'xxx-xxx'}
{'_id': ObjectId('61960d1786775b679c0ff6d9'), 'class': '3', 'id': 'xxx-xxx'}