Python爬虫之MongoDB

目录

一、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.mfbz.cn/a/13888.html

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

相关文章

吃透Redis面试八股文

Redis连环40问&#xff0c;绝对够全&#xff01; Redis是什么&#xff1f; Redis&#xff08;Remote Dictionary Server&#xff09;是一个使用 C 语言编写的&#xff0c;高性能非关系型的键值对数据库。与传统数据库不同的是&#xff0c;Redis 的数据是存在内存中的&#xf…

原来这就是所谓的 JSR!

相信大家在学习 Java 的过程中&#xff0c;或多或少都见过 JSR 这个词。本篇文章就科普下什么是 JSR。 什么是 JSR &#xff1f; JSR&#xff08;Java Specification Requests&#xff09;&#xff0c;是指 Java 规范请求&#xff08;或者活规范提案&#xff09;。这个请求&a…

API 自动化测试难点总结与分享

笔者是 API 管理工具的项目参与者之一&#xff0c;在日常工作中会经常遇到 API 自动化测试难点&#xff0c;我决定总结分享给大家&#xff1a; API 自动化测试的难点包括&#xff1a; 接口的参数组合较多&#xff0c;需要覆盖各种可能的情况。 接口的状态和数据关联较多&#…

typescript全局安装卸载以及npm相关问题

全局安装 npm install -g typescript 全局安装之后&#xff0c;如果想要卸载要使用 npm uninstall -g typescript 全局安装之后可以在终端使用 tsc xxx 编译ts文件 本地安装&#xff0c;也就是在项目目录下安装 npm install typescript 本地卸载 npm uninstall type…

2022年中国广义数据智能市场规模为442亿元

数据智能是当前市场上的热点应用。但业界对于数据智能的发展状况&#xff0c;缺乏深入探讨与研究。为了系统梳理中国数据智能行业市场全景&#xff0c;厘清行业发展脉络&#xff0c;为从业者提供有价值的借鉴&#xff0c;海比研究院联合中国软件网、中国软件行业协会应用软件产…

camunda如何处理流程待办任务

在 Camunda 中处理流程任务需要使用 Camunda 提供的 API 或者用户界面进行操作。以下是两种常用的处理流程任务的方式&#xff1a; 1、通过 Camunda 任务列表处理任务&#xff1a;在 Camunda 任务列表中&#xff0c;可以看到当前需要处理的任务&#xff0c;点击任务链接&#…

【谷歌扩展程序入门】简单制作一个查看网页结构的扩展程序

简言 在想看网页结构的时候一般会F12查看元素内容。 太麻烦了 还不简单方便。 扩展程序 扩展建立在诸如 HTML、JavaScript 和 CSS 之类的 Web 技术之上。它们在单独的沙盒执行环境中运行并与 Chrome 浏览器交互。 扩展允许您通过使用 API 修改浏览器行为和访问 Web 内容来“扩…

婚恋交友app开发中需要注意的安全问题

前言 随着移动设备的普及&#xff0c;婚恋交友app已经成为了人们生活中重要的一部分。但是&#xff0c;这些应用的开发者需要确保应用的安全性&#xff0c;以保护用户的隐私和数据免受攻击。本文将介绍在婚恋交友app开发中需要注意的安全问题。 在当今数字化时代&#xff0c;…

程序员面试完之后,人麻了...

去面试吧 面不被录用的试 面hr为了完成任务的试 面一轮二轮没有下文试 面需要通勤2小时的试 面随时加班的试 ...... 今年的“金三银四”被网友们称为“铜三铁四”&#xff0c;招聘软件上的岗位都能背下来了&#xff0c;简历却依然石沉大海。 好不容易等来个回复&#xff…

Linux常用命令——iptables命令

在线Linux命令查询工具 iptables Linux上常用的防火墙软件 补充说明 iptables命令是Linux上常用的防火墙软件&#xff0c;是netfilter项目的一部分。可以直接配置&#xff0c;也可以通过许多前端和图形界面配置。 补充说明 - 语法选项基本参数 - 命令选项输入顺序工作机制…

借由Net5.5G,看到运营商的新沧海

我们都记得这样一句诗&#xff1a;“东临碣石&#xff0c;以观沧海”。 想要看到沧海的壮阔波澜&#xff0c;就先要抵达碣石山这样可以看到大海的地方。在数字化的发展过程中&#xff0c;往往一个技术或产业趋势就是一座碣石山&#xff0c;借由它可以看到描绘着未来机遇的新沧海…

如何使用JMeter和Ant生成高效测试报告?

Jmeter接口自动化测试项目实战视频教程地址&#xff1a;https://www.bilibili.com/video/BV1e44y1X78S/? 目录&#xff1a;导读 引言 一、安装ant 二、ant关联jmeter工具 三、执行 结语 引言 你曾经在进行软件测试时遇到过测试结果难以分析&#xff0c;甚至花费大量时间…

【技巧】如何在微信与企业微信端实现自动化ChatGPT智能机器人服务?(WorkTool)

场景描述 对于使用企业微信办公协作的公司/团体/组织等&#xff0c;在工作的时候&#xff0c;经常需要通过群机器人的方式&#xff0c;回答群内成员的问题。 基于此&#xff0c;一些企业想要将ChatGPT的智能对话能力与企业微信群机器人的回复能力结合&#xff0c;在企业微信群…

【LeetCode: 354. 俄罗斯套娃信封问题 | 暴力递归=>记忆化搜索=>动态规划+二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

ClickHouse快速入门

目录 1 ClickHouse介绍1.1 ClickHouse 的特点1.1.1 列式存储1.1.2 DBMS 的功能1.1.3 多样化引擎1.1.4 高吞吐写入能力1.1.5 数据分区与线程级并行1.1.6 性能对比 2 数据类型2.1 整型2.2 浮点型2.3 布尔型2.4 Decimal 型2.5 字符串2.6 枚举类型2.7 时间类型2.8 数组 3 表引擎3.1…

【Linux】6、在 Linux 操作系统中安装软件

目录 一、yum 命令二、安装 wget 一、yum 命令 类似 Linux 中的应用商店 &#x1f4c3;① yum 是 RPM 软件包管理器 ✏️ Red-Hat Package Manager &#x1f4c3;② yum 用于自动化安装、配置 Linux 软件&#xff08;可自动解决依赖问题&#xff09; &#x1f4c3;③ 语法&a…

十个超级好用的Javascript技巧

概览&#xff1a;在实际的开发工作过程中&#xff0c;积累了一些常见又超级好用的Javascript技巧和代码片段&#xff0c;包括整理的其他大神的JS使用技巧&#xff0c;今天筛选了10个&#xff0c;以供大家参考。 动态加载JS文件 在一些特殊的场景下&#xff0c;特别是一些库和…

再也不去字节跳动面试了,6年测开经验的真实面试经历.....

前几天我朋友跟我吐苦水&#xff0c;这波面试又把他打击到了&#xff0c;做了快6年软件测试员。。。为了进大厂&#xff0c;也花了很多时间和精力在面试准备上&#xff0c;也刷了很多题。但题刷多了之后有点怀疑人生&#xff0c;不知道刷的这些题在之后的工作中能不能用到&…

图表示学习算法学习

struc2vec: Learning Node Representations from Structural Identity learning latent representations for the structural identity of nodes. &#xff1a; 从结构特征中学习节点潜在表示 node representation : 节点表示 structural identity : 结构特征 struct2Vec是一个…

文件系统和动静态库

目录 再识文件属性 查看文件属性的原理 初识inode 了解磁盘 什么是磁盘 磁盘的结构 磁盘的存储结构 CHS寻址 磁盘的逻辑结构 使用LBA地址的意义 理解文件系统 页框和页帧 分治思想管理 Linux ext2文件系统 软硬链接 软链接 硬链接 文件的三个时间 动静态库 …
最新文章