Python爬虫之MongoDB

news/2024/4/28 20:42:36/文章来源:https://blog.csdn.net/m0_63636799/article/details/130344646

目录

一、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 默认为256max: 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.luyixian.cn/news_show_103110.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于C#asp.net心里咨询服务网站系统

功能模块&#xff1a; 主要分为管理员和注册用户&#xff0c;注册用户可以查看所有人发布的心里文章&#xff0c;情感在线问答&#xff0c;查询相似问题&#xff0c;以及进入论坛进行交流&#xff08;发帖跟帖评论收藏等&#xff09;后台管理主要是针对个人信息修改 管理员对注…

商品价格监控业务场景,API数据分析

商品价格监控指的是对特定商品价格进行实时监控和跟踪&#xff0c;及时更新最新价格并分析价格变化的行为。这种监控可以帮助企业及时了解市场行情&#xff0c;并根据价格变化情况做出相应的调整&#xff0c;以更好地应对市场变化。 一般来说&#xff0c;商品价格监控需要以下…

KVM虚拟机的磁盘无损扩容方法-qcow2格式的

起因&#xff1a;我的KVM主机上安装了基于Debian11的 虚拟机母鸡&#xff0c;其他虚拟机都由此克隆而来。因为最初只配置了8G的虚拟硬盘&#xff0c;因此在需要占用比较大的空间的应用时&#xff0c;就比较麻烦。度娘等中文搜索结果没找到答案&#xff0c;只能google了。 这里…

JavaScript概述四(DOM文档对象模型)

1.DOM(Document Object Model) 会把网页里面的元素当成对象去操作,包含对象的属性,属性值,方便我们去 操作网页。 整个页面最终会形成一个对象 :document ,页面里面的所有的元素(如 标签 ) 最终都会转换成 js 里面的对象。 1.1 获取页面的元素&#xff08;通过选择器&#xff0…

JS-11A/224时间继电器 JOSEF约瑟 板前、板后接线

系列型号&#xff1a; JS-11A/11集成电路时间继电器&#xff1b;JS-11A/12集成电路时间继电器&#xff1b; JS-11A/13集成电路时间继电器&#xff1b;JS-11A/136集成电路时间继电器&#xff1b; JS-11A/137集成电路时间继电器&#xff1b;JS-11A/22集成电路时间继电器&#…

数据结构与算法(三):数论(树形结构、二叉树、二叉搜索树、红黑树、Btree、B+Tree、赫夫曼树、堆树)

数论&#xff08;树形结构、二叉树、二叉搜索树、红黑树、Btree、BTree、赫夫曼树、堆树&#xff09; 树形结构概念 在树形结构里面重要的术语&#xff1a; 结点&#xff1a;树里面的元素。 父子关系&#xff1a;结点之间相连的边 子树&#xff1a;当结点大于1时&#xff0…

华为OD机试真题(Java),数字涂色(100%通过+复盘思路)

一、题目描述 疫情过后&#xff0c;希望小学终于又重新开学了&#xff0c;三年二班开学第一天的任务是将后面的黑板报重新制作。 黑板上已经写上了N个正整数&#xff0c;同学们需要给这每个数分别上一种颜色。 为了让黑板报既美观又有学习意义&#xff0c;老师要求同种颜色的…

LoadRunner参数化最佳实践:让你的性能测试更加出色!

距离上次使用loadrunnr 已经有一年多的时间了。初做测试时在项目中用过&#xff0c;后面项目中用不到&#xff0c;自己把重点放在了工具之外的东西上&#xff0c;认为性能测试不仅仅是会用工具&#xff0c;最近又想有一把好的利器毕竟可以帮助自己更好的完成性能测试工作。这算…

QMS-云质说质量 - 1 张小泉的质量危机

云质QMS原创 转载请注明来源 作者&#xff1a;王洪石 引言 百年老店的拍蒜质量门 最近张小泉拍蒜断刀事件&#xff0c;吸引了全民关注&#xff0c;虽然随后发布了“断刀召集令”&#xff0c;但从事件发生到后续拖沓且不专业的应对&#xff0c;张小泉肯定是“失蒜”了。 张小泉…

Spring Security实战(六)—— 跨域与CORS

跨域是一种浏览器同源安全策略&#xff0c;即浏览器单方面限制脚本的跨域访问。 一、认识跨域 跨域&#xff08;Cross-Origin&#xff09;指的是在Web开发中&#xff0c;当一个网页的内容要从不同源&#xff08;即不同的域名、协议或端口&#xff09;获取时&#xff0c;就会发…

ajax的介绍及使用

ajax的介绍 开发流程 前端 ajax:前后端沟通的桥梁 后端 ajax介绍 ajax叫做异步的Javascript和xml ajax通过浏览器与服务器&#xff08;后端&#xff09;进行少量数据交互&#xff0c;进行页面异步更新&#xff08;网页不会重新加载&#xff09; 优点&#xff1a; 减轻服务器负…

Vue3进阶使用详解(node.js、Vue3路由基础项目、axios的使用详细(实现数据分页---前后端分离)、axios加载失败)

Vue3进阶使用详解(node.js、Vue3路由基础项目、axios的使用详细(实现数据分页—前后端分离)、axios加载失败) Vue cli CLI是Commond-Line Interface&#xff0c;翻译为命令界面&#xff0c;又称脚手架。VueCLI是一个官方发布vue.js项目脚手架。使用VueCLI可以快速搭建vue开发…

v-for比v-if优先级更高?面试官:回去等通知吧

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 前言 v-if和v-for哪个优先级更高呢&#xff1f;这是面试官常常问到的一个问题&#xff0c;…

算法训练 Day41 | 动态规划

343. 整数拆分 思路&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义&#xff1a;dp[i]&#xff1a;分拆数字i&#xff0c;可以得到的最大乘积为dp[i]。 确定递推公式&#xff1a;dp[i] max(dp[i], max((i - j) * j, dp[i - j] * j)) 可以想 dp[i]最…

3.Spring Security实现JWT token验证

目录 1. Spring Security详细介绍 2. Spring Security详细使用 3. Spring Security实现JWT token验证 4. JWT&#xff08;JSON Web Token&#xff0c;JSON令牌&#xff09; 5. Spring Security安全注解 Spring Security实现JWT token验证 Spring Security是Spring提供的一…

【Spring篇】DI相关内容

&#x1f353;系列专栏:Spring系列专栏 &#x1f349;个人主页:个人主页 目录 一、setter注入 1.环境准备 2.注入引用数据类型 3.注入简单数据类型 二、构造器注入 1.环境准备 2.构造器注入引用数据类型 3.构造器注入多个引用数据类型 4.构造器注入多个简单数据类型 …

SAS学习第4章:t检验

前话&#xff1a;分析试验数据的差异&#xff0c;一般都会假设样本值之间或者样本与标准值之间无差异&#xff0c;根据不同方法计算得出的t值、q值、F值等等&#xff0c;均表示两者之间的差异程度&#xff0c;值越大&#xff0c;两者差异越大&#xff0c;该假设越不成立&#x…

Vue3+Three.js+antvG2实战项目 智慧城市(三)

前言 在网上找了很久都没有找到使用Three.js开发智慧城市的免费文章或者免费视频,自己花了一点时间做了一个纯前端的智慧城市项目。 技术栈都是最新的:vue3vitetypeScriptThreeantv G2 源码分享 源码 模型,天空图盒子链接分享(不想下载源码可以只用下这个)提取码1234 20230424_…

TVM: An Automated End-to-End Optimizing Compiler for Deep Learning

https://www.usenix.org/conference/osdi18/presentation/chen 文章目录 TVM: An Automated End-to-End Optimizing Compiler for Deep Learning引言1. 简介2. 总览3. 优化计算图4. 生成张量运算4.1 张量表达式和调度空间4.3 嵌套并行与协作4.3 张量化4.4 显式内存延迟隐藏 5 .…

跌倒检测和识别4:C++实现跌倒检测(含源码,可实时跌倒检测)

跌倒检测和识别4&#xff1a;C实现跌倒检测(含源码&#xff0c;可实时跌倒检测) 目录 跌倒检测和识别4&#xff1a;C实现跌倒检测(含源码&#xff0c;可实时跌倒检测) 1. 前言 2. 跌倒检测模型&#xff08;YOLOv5&#xff09; &#xff08;1&#xff09;跌倒检测模型训练 …