爬虫系列之mongodb

mongodb

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
在这里插入图片描述

MongoDB的CURD

数据库操作

显示所有数据库 show dbs
在这里插入图片描述
切换数据库(如果要切换的数据库不存在则创建)
use 数据库名
在这里插入图片描述
在数据库中增加集合(表)
db.表名.insert(数据)
在这里插入图片描述
删除数据库
db.dropDatebase()
在这里插入图片描述

集合操作

显示该数据库中的所有集合
show tables;
删除数据库中的集合
db.表名.drop()
在这里插入图片描述

文档操作

添加文档

注意如果没有指定_id则默认ObjectId,_id不能重复,且在插入后不可变

插入单条

user0={
    "name":"ys",
    "age":29,
    'hobbies':['game','book','match'],
    'addr':{
        'country':'China',
        'city':'HN'
    }
}
use test
db.user.insert(user0)
db.user.find()

在这里插入图片描述
插入多条

user1={
    "_id":1,
    "name":"ys",
    "age":29,
    'hobbies':['book','game','match'],
    'addr':{
        'country':'China',
        'city':'HN'
    }
}
 
user2={
    "_id":2,
    "name":"ymt",
    "age":29,
    'hobbies':['music','book','TV'],
    'addr':{
        'country':'China',
        'city':'HN'
    }
}
 
 
user3={
    "_id":3,
    "name":"yyh",
    "age":3,
    'hobbies':['game','paly','TV'],
    'addr':{
        'country':'China',
        'city':'HN'
    }
}
 
user4={
    "_id":4,
    "name":"yzm",
    "age":1,
    'hobbies':['sleep','milk','play'],
    'addr':{
        'country':'China',
        'city':'HN'
    }
}
 
user5={
    "_id":5,
    "name":"yzt",
    "age":1,
    'hobbies':['sleep','milk','play'],
    'addr':{
        'country':'China',
        'city':'HN'
    }
}
db.user.insertMany([user1,user2,user3,user4,user5])
db.user.find()

在这里插入图片描述

查看文档

1.比较运算
# SQL:=,!=,>,<,>=,<=
# MongoDB:{key:value}代表什么等于什么
# "$ne","$gt","$lt","gte","lte",其中"$ne"能用于所有数据类型

# 1.select * from user where name = "ys";
db.user.find({"name":"ys"})

在这里插入图片描述

# 2.select * from user where name !="ys";
db.user.find({"name":{"$ne":"ys"}})

在这里插入图片描述

# 3.select * from user where id > 2;
db.user.find({"_id":{"$gt":2}})

在这里插入图片描述

# 4.select * from user where id < 3;
db.user.find({"_id":{"$lt":3}})

在这里插入图片描述

# 5 select * from user where id >= 2;
db.user.find({"_id":{"$gte":2}})

在这里插入图片描述

# 6 select * from user where id <=2;
db.user.find({"_id":{"$lte":2}})

在这里插入图片描述

2.逻辑运算
# SQL:and or not %
# MongoDB:字典中逗号分隔的多个条件是and关系,"$or"的条件放到{}内,$not,$mod类似
# 1 select * from user where id>=2 and id < 4;
db.user.find({"_id":{"$gte":2,"$lt":4}})

在这里插入图片描述

# 2 select * from user where id >= 2 and age < 20;
db.user.find({"_id":{"$gte":2},"age":{"$lt":20}})

在这里插入图片描述

# 3 select * from user where id >=5 or name = "yzm";
db.user.find({"$or":[{"_id":{"$gte":5}},{"name":"yzm"}]})

在这里插入图片描述

# 4 select * from user where id % 2 = 1;
db.user.find({"_id":{"$mod":[2,1]}})

在这里插入图片描述

# 5 select * from user where id % 2 != 1;
db.user.find({"_id":{"$not":{"$mod":[2,1]}}})

在这里插入图片描述

3.成员运算
# SQL in,not in
# MongoDB $in $nin
# 1 select * from user where age in (1,2,3);
db.user.find({"age":{"$in":[1,2,3]}})

在这里插入图片描述

# select * from user where name not in ('yzt','yzm');
db.user.find({"name":{"$nin":['yzt','yzm']}})

在这里插入图片描述

4.正则匹配
# SQL regexp 正则
# MongoDB /正则表达式/i
# 1 select * from user where name regexp '^y.*?(m|t)$';
db.user.find({"name":/^y.*?(m|t)$/i})

在这里插入图片描述

5.取指定字段
# 1 select name,age from user where id=3;
# 字段:1 显示该字段   字符:0 不显示该字段
db.user.find({"_id":3},{'name':1,'age':1})

在这里插入图片描述

db.user.find({"_id":3},{"addr":0})

在这里插入图片描述

6.查询数组
# 1 查看有sleep爱好的人
db.user.find({"hobbies":"sleep"})

在这里插入图片描述

# 2 查看既有TV爱好又有music爱好的人
db.user.find({"hobbies":{"$all":["TV","music"]}})

在这里插入图片描述

# 3 查看第3个爱好为play的人
db.user.find({"hobbies.2":"play"})

在这里插入图片描述

# 4 查看所有人最后两个爱好
db.user.find({},{"hobbies":{"$slice":-2},"age":0,"_id":0,"name":0,"addr":0})

在这里插入图片描述

# 5 查看所有人的第2个到第3个爱好
db.user.find({},{"hobbies":{"$slice":[1,2]},"age":0,"_id":0,"name":0,"addr":0})

在这里插入图片描述

7.排序
# 排序: 1代表升序 -1代表降序
db.user.find({},{"name":1,"age":1,"_id":0}).sort({"age":1})

在这里插入图片描述

# 如果年龄一直,则按照id从大到小排序
db.user.find({},{"name":1,"age":1}).sort({"age":1,"_id":-1})

在这里插入图片描述

8.分页
# 分页: limit代表取多少个文档 skip代表跳过多少个文档
db.user.find().limit(2)

在这里插入图片描述

# 跳过第一个 取下面的2个
db.user.find().limit(2).skip(1)

在这里插入图片描述

9.查询数量
db.user.find({"age":{"$gte":20}}).count()

在这里插入图片描述

10.其他查询
# 1 如果匹配的值为null,那么得到的结果为没有这个key的和有个key但是值为null的
db.user.insert({"hope":"healthy"})
db.user.insert({"hope":null})

在这里插入图片描述

# 2 查找所有
db.user.find() #等于 db.user.find({})
db.user.find().pretty() # json输出
# 3 查找匹配成功的第一个
db.user.findOne({"_id":{"$gt":3}})

在这里插入图片描述

修改文档

1.覆盖更新
# 除非是删除 否则_id是始终不会变的
db.user.update({"age":3},{"name":"yyhbb"})
# 找到年龄为3岁的 然后整条覆盖

在这里插入图片描述

# 2 一种最简单的更新就是用一个新的文档替换匹配的文档
# 这适用于大规模迁移的情况
var obj=db.user.findOne({"_id":2})
 
obj.username=obj.name+'SB'
obj.hobbies_count++
delete obj.age
 
db.user.update({"_id":2},obj)
2.局部更新

通常文档只会一部分需要更新。可以使用原子性的更新修改器。指定对文档中的某些字段进行更新。更新修改器是种特殊的键,用来指定复杂的更新操作,比如修改增加或者删除。

# 1 update user set name="yyh" where id = 3;
db.user.update({"_id":3},{"$set":{"name":"yyh"}})

在这里插入图片描述

# 2 没有匹配成功则新增一条 {"upsert":true}
db.user.update({"_id":6},{"$set":{"name":"ycy","age":63}},{"upsert":true})

在这里插入图片描述

# 3 默认只改匹配成功的第一条 
# {"multi":true} 改多条
db.user.update({"name":"ys"},{"$set":{"name":"ystest"}})
db.user.update({"name":"ys"},{"$set":{"name":"ys1111111"}},{"multi":true})

在这里插入图片描述

# 4 修改内嵌文档 (字典)
db.user.update({"name":"ys1111111"},{"$set":{"addr.city":"HNLH"}})

在这里插入图片描述

# 5 修改内嵌文档(列表)
db.user.update({"name":"ys1111111"},{"$set":{"hobbies.2":"TV"}})

在这里插入图片描述

# 6 删除ys1111111的爱好 $unset
db.user.update({"name":"ys1111111"},{"$unset":{"hobbies":""}})

在这里插入图片描述

3.自增或自减
# $inc 
# 1 所有人年龄增加一岁
# 有该字段的自动增加1 没有该字段的创建该字段,并且值为1
db.user.update({},{"$inc":{"age":1}},{"multi":true})

在这里插入图片描述

# 2 所有人年龄减少2岁
db.user.update({},{"$inc":{"age":-2}},{"multi":true})
4.添加或删除组内元素
# 添加删除数组内元素: $push $pop $pull
# 在数组内添加元素 $push
# 1 名字为ys的人添加一个爱好read
db.user.update({"name":"ys"},{"$push":{"hobbies":"read"}})

在这里插入图片描述

# $pop 安装位置且只能从开头或结尾删除元素
db.user.update({"name":"ys"},{"$pop":{"hobbies":1}}) # 从尾部删
db.user.update({"name":"ys"},{"$pop":{"hobbies":-1}}) # 从首部删

在这里插入图片描述

# $pull 把符合条件的统统删掉
db.user.update({'addr.country':"China"},{"$pull":{"hobbies":"read"}},{"multi":true})

删除文档

# 1 删除多个中的第一个
db.user.deleteOne({"age":29})

在这里插入图片描述

# 2 删除国家为China的全部
db.user.deleteMany( {'addr.country': 'China'} )
# 3 删除全部
db.user.deleteMany({})

pymongo

在这里我们来看一下Python3下MongoDB的存储操作,在开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库。
pip install pymongo

连接MongoDB

import pymongo
client = pymongo.MongoClient(host='localhost', port=27017)
# 给客户端指定要操作的是哪个数据库 这里是test数据库
db = client.test
# 指定数据库后,选择数据库中要操作的表
collection = db.user
# 插入数据
info= {
    '_id': '10',
    'name': 'ycy',
    'age': 63
}
result = collection.insert_one(info)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值