Python爬虫之MongoDB

news2024/11/25 0:59:00

目录

一、Mongo概述

二、安装&下载

1.下载:

2.安装

三、基本命令

插⼊数据

查询数据

修改数据

删除数据

索引

四、Python与MongoDB交互

1.安装pymongo

2.使⽤


一、Mongo概述

  1. MongoDB是什么?

    MongoDB是⾮关系型数据库(No sql)

  2. 为啥需要学习MongoDB?

    • 企业需求

    • 爬⾍爬取数据到⼀个量级 使⽤MongoDB⽐mysql好⼀些

  3. MongoDB特点

    • ⽆数据结构(⽅便爬⾍)

    • (具有⾮常⾼读写能⼒)

    • 良好的⽀持 (完善⽂档,跨平台,稳定)

二、安装&下载

1.下载:

官网:MongoDB: The Developer Data Platform | MongoDB

2.安装

安装步骤:

双击安装文件

点击下一步

勾选并点击下一步

安装方法:默认安装会默认安装到C盘,不能修改安装路径

这里我选择自定义安装

自定义安装路径

默认即可

取消勾选,并点击下一步

如果不取消勾选,会自动安装一个软件:用来管理此数据库的程序,当由于是从国外网站下载程序,速度会很慢,为避免安装过程中出现问题,我们就取消勾选。

点击安装

等待安装完成即可。

三、基本命令

SQL概念MongoDB概念解释
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield字段/域
indexindex索引
primary keyprimary key主键
show dbs # 查看数据库
cls 清屏命令
use mark # 使⽤数据库/创建数据库
db # 查看当前正在使⽤数据库名称
show collections/tables # 查看当前数据库下的集合 --- 表
db.dropDatabase() # 删除当前正在使⽤的数据库

插⼊数据

insert()

  • 不⼿动创建表(当前没有这个表,插⼊⼀条数据,表⾃动创建)

    db.demo1.insert({x:1})

  • ⼿动创建表

    db.createCollection(name,option)
    name:创建集合名称
    option:⼀个字典 指定创建集合的配置
        capped: 默认False 没设置上限 True 设置上限
        size: 表示设置上限的⼤⼩ 字节 如果设置⼤⼩<256 默认为256
        max: number 指定上限集合的最⼤允许的⽂档数量 (最⼤⾏数)
        # 超过范围数据会被覆盖
    ​
    # 例⼦
    db.createCollection('demo1',{capped:true,size:5000,max:4})
    # 检测当前集合有没有设置上限 false没有 true有
    db.mark.isCapped()
     

  • 插⼊多条数据

    db.demo1.insert([{name:'小泽',age:20,addr:'南京'},{name:'小超',age:20,addr:'南京'}])
    for(i=3;i<10;i++)db.demo1.insert({x:i})
     

save()

# 指定id 找到就更新 没找到插⼊
db.demo1.save({_id:1,name:'小马'})
 

查询数据

find()

  • 查询mark集合内所有数据

    db.demo1.find() 
     

  • 精确查询

    db.demo1.find({addr:'徐州'}) 
     

  • 格式化显示查询结果

    db.demo1.find({addr:'徐州'}).pretty() 
     

  • 符合条件的第⼀条数据

    db.demo1.findOne({addr:'徐州})
     

  • 多条件查询

    db.demo1.findOne({addr:'徐州',name:'小义'})
     

操作查询结果

  • 查询集合⾥数据个数

    db.demo1.find().count()
    db.demo1.count() 
     

  • 查询符合条件数据个数

    db.demo1.find({addr:'徐州'}).count()
    db.demo1.count({addr:'徐州'})
     

  • 查询前⼏条数据 限制条件 不分负号

    db.demo1.find().limit(2)
    db.demo1.find().limit(-2) 
     

  • 跳过⼏条数据

    db.demo1.find().skip(2)
     

  • 查询age>19数据

    db.demo1.find({age:{$gt:19}})

    等于:默认是等于判断,没有运算符

    ⼩于:$lt

    ⼩于等于:$lte

    ⼤于:$gt

    ⼤于等于:$gte

    不等于:$ne

  • ⾃定义查询

    db.demo1.find({$where:function(){return this.age > 19;}})

    如果age对应的值是字符串类型的,也能筛选出来,而db.demo1.find({age:{$gt:19}})这种方法就筛选不出来

  • 映射:返回指定字段,如果为1 返回该字段,_id列默认显示

    2个字典分别代表的含义:

    1. 显示行

    2. 显示列

    db.mark.find({},{age:1})
    db.mark.find({},{age:1,_id:0})
     

  • 排序

    # 按照年龄升序
    db.mark.find().sort({age:1}) 
    # 按照年龄降序
    db.mark.find().sort({age:-1}) 
     

拓展:正则查询

# 查询英文、数字类型的数据
db.demo1.find({name:{$regex:'\\w'}})
# 查询中文类型的数据
db.demo1.find({name:{$regex:'\u4e00-\u9fa5'}})

修改数据

update()

三个字典分别代表的含义:

  1. query:查询条件

  2. update: 更新的内容

  3. multi:默认false 表示更新第⼀个符合条件的数据 true 把所有满⾜条件的数据进⾏更新

  • 正常更新 其余字段不保留

    db.demo1.update({name:'小义'},{name:'小毅'})
     

  • 指定字段更新 保留其余字段

    db.demo1.update({name:'小强'},{$set:{name:'小弱'}})
     

  • 符合条件全部进⾏更新

    db.demo1.update({addr:'南京'},{$set:{addr:'江宁'}},{multi:true})
     

删除数据

remove()

  • 删除集合名

    db.demo2.drop()

  • 删除集合下所有数据

    db.demo2.remove({})

  • 删除符合条件的数据

    # 删除符合条件的所有数据
    db.demo1.remove({addr:'江宁'})
    # 删除符合条件的第n条数据
    # justOne
    # justTwo
    # justThree
    #.....
    # 只有justOne生效,其余都是删除匹配到的所有数据
    db.demo1.remove({addr:'徐州'},{justOne:true})

  • delete效率⽐remove⾼

    db.mark.deleteOne({age:96}) 
    db.mark.deleteMany({age:18})

索引

更快

  • 插⼊示例数据

    for(i=0;i<100000;i++){db.test.insert({name:'test'+i,age:i})}

    运行之后可以看到光标一直在闪,是因为想要插入的数据太多,程序一直在运行中,一段时间之后就会运行完成

    我们查看一下插入的数据,发现只能看到20条数据

    可以查看更多数据

  • 创建索引前

    db.test.find({name:'test9999'})
    db.test.find({name:'test9999'}).explain('executionStats')# 40ms

  • 创建索引

    db.test.ensureIndex({name:1}) # name字段作为索引

  • 创建索引后

    db.test.find({name:'test9999'}).explain('executionStats') # 12ms

  • 查看集合

    db.test.getIndexes()

  • 删除索引

    db.test.dropIndex({name:1})

  • 默认情况下 _id 是集合的索引

四、Python与MongoDB交互

1.安装pymongo

pip install pymongo -i https://pypi.douban.com/simple

2.使⽤

插入

import pymongo
​
# 创建链接
conn = pymongo.MongoClient()
conn['data']['demo1'].insert_one({'x':'1'})

import pymongo
​
# 创建链接
conn = pymongo.MongoClient()
# conn['data']['demo1'].insert_one({'x':'1'})
conn['data']['demo1'].insert_many([{'x':'2'},{'x':'3'}])

查询

import pymongo
​
# 创建链接
conn = pymongo.MongoClient()
# conn['data']['demo1'].insert_one({'x':'1'})
# conn['data']['demo1'].insert_many([{'x':'2'},{'x':'3'}])
res = conn['data']['demo1'].find()
for i in res:
    print(i)

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/456859.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无线传感网络课程作业 1-dijkstra算法计算最短路径并输出经过的节点

无线传感网络课程作业 1 仅供参考-如有需要可订阅专栏 题目有如下网络图: abc三个数以a=3,b=1,c=1为例 运行环境:anaconda3环境管理工具,Python 3.9.12,Windows 10 22H2算法实现原理流程i).

Java——二叉搜索树的后序遍历序列

题目链接 牛客在线oj题——二叉搜索树的后序遍历序列 题目描述 输入一个整数数组&#xff0c;判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。 数据范围&#xff1a; 节点数量 0≤n≤1000 …

PLECS的基本介绍

PLECS的基本介绍 一&#xff1a;PLECS的基本介绍简单说明二&#xff1a;多功能的辅助工具三&#xff1a;主要功能介绍1、独特的热分析功能2、功能强大的示波器3、极快的仿真速度4、强大的波形分析工具5、C 语言控制器6、丰富的元件库 一&#xff1a;PLECS的基本介绍简单说明 1&…

QMS-云质说质量 - 7 IATF 16949哪个条款严重不符合项最多?

云质QMS原创 转载请注明来源 作者&#xff1a;王洪石 引言 AIAG 《质量2020》报告的数据是否让你惊讶&#xff1f; AIAG与德勤合作发布的汽车行业《质量2020》报告指出&#xff0c;"OEMs和供应商都将问题解决和CSR&#xff08;Customer Specific Requirement顾客特定要求…

What...MiniGPT-4居然开源了,提前感受 GPT-4 的图像对话能力

说在前面的话&#xff1a; 一个月前&#xff0c;OpenAI向外界展示了GPT-4如何通过手绘草图直接生成网站&#xff0c;令当时的观众瞠目结舌。 在GPT-4发布会之后&#xff0c;相信大家对ChatGPT的对话能力已有所了解。圈内的朋友们应该已经亲身体验过无论是文本生成、编写代码&…

涨点技巧:基于Yolov5/Yolov7的困难样本挖掘---LRM loss,提升难样本检测精度

1.hard example mining(困难样本挖掘)✨✨✨ 困难例挖掘方法通常可以提高目标检测器的性能,因为它受到不平衡训练集的影响。为了通过RoI正确地挖掘困难例,引入了在线困难例挖掘(OHEM)方法[15]。该方法建议只考虑对反向传播最有利的RoI。给出最高损失值的RoI被认为是最难的…

【汽车品牌案例 Objective-C语言】

一、刚才,我给大家说了一下这个单元格的重用,接下来,我给大家再做一个案例, 1.再做一个什么案例呢,还是显示那个汽车品牌, 咱们上午是不是做过一个那个汽车品牌的展示了,做过那个展示,那是简单的一个展示,咱们再做一个,使用另外一个不同的一个plist文件,car_total.…

必应,百度,神马头条,搜狗专用站长seo推送工具大全

软件介绍&#xff1a; 百度开始打击滥用api问题&#xff0c;针对这个问题已经开发了拟人推送系列功能&#xff0c;放心使用。 五合一高效推送软件&#xff0c;目前支持百度&#xff0c;神马&#xff0c;必应&#xff0c;搜狗&#xff0c;头条&#xff0c;谷歌六大搜索引擎同步…

setup,ref,reactive

初识setup 1.理解:Vue3.0中一个新的配置项&#xff0c;值为一个函数。 2.setup是所有Composition API(组合API)“表演的舞台”。 3.组件中所用到的:数据、方法等等&#xff0c;均要配置在setup中。 4.setup函数的两种返回值: 1.若返回一个对象&#xff0c;则对象中的属性、…

IDEA(七) 使用UML类图

目录 1.相关快捷键1.1 查看快捷键1.2 其他快捷键1.3 分析类图1.4 定制展示类中的内容1.5 适配窗口和1:1展示1.6 定制布局1.7 其他设置 1.相关快捷键 1.1 查看快捷键 Ctrl Alt U &#xff1a;以弹窗的形式查看UML类图。Ctrl Shift Alt U &#xff1a;以标签的形式查看UML…

C learning_9 (函数篇)

目录 函数 函数的概念 函数的作用 函数的分类 函数的参数 函数的调用 函数 函数的概念 概念&#xff1a;C语言中的函数是一种封装了一定功能的代码块&#xff0c;可以在程序的任意位置调用。 返回值类型 函数名(参数列表) { 函数体 return 返回值; } 1.返回值类型指定了…

Vue的路由实现:hash模式 和 history模式原理及区别

目录标题 1、hash模式2、history模式 Vue-Router有两种模式: ** hash 模式和 history**模式。默认的路由模式是hash模式。 1、hash模式 简介&#xff1a;hash模式是开发中默认的模式&#xff0c;它的URL带着一个#&#xff0c;例如:http://www.abc.com/#/vue&#xff0c;它的…

从广交会,看懂海尔智家逆势增长的秘密

中国企业的全球化战略应从何处、以何种方式推进&#xff1f;作为行业全球化最彻底的企业&#xff0c;海尔智家是个很好的参考。 4月15日&#xff0c;在第133届中国进出口贸易交易会&#xff08;以下简称“广交会”&#xff09;上&#xff0c;海尔智家展示了其扎根本土&#xf…

Learning Dynamic Facial Radiance Fields for Few-Shot Talking Head Synthesis 笔记

Learning Dynamic Facial Radiance Fields for Few-Shot Talking Head Synthesis 笔记 摘要 Talking head synthesis is an emerging technology with wide applications in film dubbing, virtual avatars and online education. Recent NeRF-based methods generate more n…

举个栗子~Tableau 技巧(253):让筛选器只显示全部以及需要的类别

用户反馈了一个需求&#xff1a;我的业务数据有很多类别&#xff0c;但其实经常查看的只有几个&#xff0c;Tableau 筛选器能不能设置一下&#xff0c;只显示全部和经常查看的那几个类别&#xff1f; 这个是可以实现的&#xff01;如下示例&#xff0c;数据类别有&#xff1a;…

好用的思维导图软件有哪些

ProcessOn &#xff0c;一款让“工具回归工具、让你回归你的"软件&#xff01; 当“在线”成为当今时代的主流时、 如果让你选择一款好用的思维导图软件、 你希望Ta 是什么样的&#xff1f; ProcessOn&#xff01; 它可以是你的待办清单、笔记工具、社区分享工具、PPT演…

vector(入门知识点)

目录 vector的介绍 ​编辑 例&#xff1a;遍历 拷贝&#xff1a; 初始化&#xff1a; 反向迭代器&#xff1a; 扩容&#xff1a; insert与erase vector的介绍 例&#xff1a;遍历 拷贝&#xff1a; 初始化&#xff1a; &#xff08;10个1&#xff09; vector<int>注意…

Jetpack Compose 中使用分页 API 调用的无限滚动

Jetpack Compose 中使用分页 API 调用的无限滚动 最近&#xff0c;我在DashCoin 的硬币屏幕上添加了一个带有分页 API 调用的无限滚动。它使浏览硬币列表变得非常困难&#xff0c;并且确实减少了初始加载时间&#xff0c;比以前少了。如果没有正确实施&#xff0c;实施无限滚动…

基数排序详解

本期内容是对之前排序内容的一部分补充&#xff0c;需要有一定的基础 (14条消息) 万字解析&#xff0c;带你深入掌握多种排序算法&#xff01;-C语言-CSDN博客 基数排序 基数排序&#xff08;Radix Sorting&#xff09;是和前面所述各类排序方法完全不相同的一种排序方法。从…

【C++】面试官:你小子,继承与多态的题你都会

文章目录 前言一、理论知识类二、编程题选择类 前言 上一篇文章我们详细了介绍了多态&#xff0c;用汇编一步一步的查看了多态的实现原理&#xff0c;讲解了这么多理论知识该做一些面试题了&#xff0c;这些面试题都是历年来大厂所出的笔试题&#xff0c;希望大家可以把我今天…