【python】——爬虫06 mongdb学习记录

一、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:存储一个布尔值,truefalse
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'}

おすすめ

転載: blog.csdn.net/grb819/article/details/121337794