MongoDB是一款由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储方式类似于JSON对象,它的字段值可以是其它文档或数组,但其数据类型只能是String文本型。

  在使用之前我们要确保已经安装好了MongoDB并启动了该服务。此处主要用于Python数据的保存,我们要安装Python的PyMongo库,运行 ‘pip install pymongo’ 命令完成pymongo的安装。进入python工作模式,可以通过pymongo.version 查看pymongo的版本信息。

  

  第一步,连接MongoDB

  我们通过PyMongo库里的MongoClient。其中第一个参数 host 是mongodb的地址,第二个参数是端口 port (不传参数的话默认是27017) 

client = pymongo.MongoClient(host='127.0.0.1',port=27017)

  另一种方法是直接传递MongoDB的连接字符串,以 mongodb 开头。

client = pymongo.MongoClient('mongodb://127.0.0.1:27017/')

  第二步,选择数据库或集合

  在MongoDB中可以建立多个数据库,其中每个数据库又包含许多集合,类似于关系数据库中的表。选择数据库有两种方法,这两种方法作用相同。

db = client.test    # test数据库
db = client['test']

  选择好数据库后我们需要指定要操作的集合,与数据库的选择类似。

p = db.persons    # persons集合
p = db['persons']

  第三步,添加数据

person = {
'id':'',
'name':'Abc',
'age':19
}
result = p.insert(person)
# 在PyMongo 3.x版本后,官方推荐使用insert_one(),该方法返回的不再是单纯的_id值,我们需要执行result.inserted_id查看 _id 值
print(result)

  此处通过对象的 insert() 方法添加了一条数据,添加成功后返回的是数据插入过程中自动添加的 _id 属性值,这个值是唯一的。另外我们还可以添加多条数据,它以列表的形式进行传递。

person = {
'id':'',
'name':'Abc',
'age':19
}
person1 = {
'id':'',
'name':'Dfg',
'age':20
}
result = p.insert([person,person1])
# 推荐使用 insert_many() 方法,之后使用 result.inserted_ids 查看插入数据的 _id 列表
print(result)

  第四步,查询数据

  查询数据我们可以使用 find_one() 或 find() 方法,其中 find_one() 得到的是单个数据结果,find() 返回的是一个生成器对象。

res = p.find_one({'name':'Abc'})  # 查询 name 为 Abc 的人的信息,返回字典型的数据
print(res)

  find() 则用来查询多条数据,返回 cursor 类型的生存器,我们要遍历取得所有的数据结果。

res = p.find({'age':20})  # 查询集合中age是20的数据
# res = p.find({'age':{'$gt':20}}) # 查询集合中age大于20的数据
print(res)
for r in res:
print(r)

  另外,我们还可以通过正则匹配进行查询。

res = p.find({'name':{'$regex':'^A.*'}})  # 查询集合中name以A开头的数据

  要统计查询的结果一共有多少条数据,需要使用 count() 方法

count = p.find().count()  # 统计集合中所有数据条数

  排序则直接调用 sort() 方法,根据需求传入升序降序标志即可

 res = p.find().sort('age',pymongo.ASCENDING)  # 将集合中的数据根据age进行排序,pymongo.ASCENDING表示升序,pymongo.DESCENDING表示降序

  当我们只需要取得几个元素时,我们可以使用 skip() 方法偏移几个位置,得到去掉偏移个数之后剩下的元素数据

res = p.find({'name':{'$regex':'^A.*'}}).skip(2)
print([ r['name'] for r in res ]) # 打印name以A开头的数据的名称name,从第三个显示

  第五步,更新数据

  更新数据我们使用 update() 方法实现,并指定更新的条件和需要更新的数据即可。

where = {'name':'Abc'}
res = p.find_one(where)
res['age'] = 25
result = p.update(where, res) # 推荐使用 update_one() 或 update_many()
print(result)

  返回的是一个字典形式的数据,{'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True},其中 ok 表示执行成功,nModified 表示影响的数据条数。

  另外我们还可以使用 $set 操作符对数据进行更新。使用$set则只更新字典内存在的字段,其它字段则不更新,也不删除。如果不用则会更新所有的数据,而其它存在的字段则会被删除。

where = {'age':{'$gt':20}}
result = p.update_many(where,{'$inc':{'age':1}}) # 将集合中年龄大于20的第一条的数据年龄加1
print(result)
print(result.matched_count,result.modified_count) # 获取匹配的数据条数,影响的数据条数

  第六步,删除数据

  删除数据可以调用 remove() 方法,需要指定删除条件。

result = p.remove({'name':'Abc'})   # 删除名称为Abc的数据,推荐使用 delete_one() 和 delete_many(),执行后调用 result.delete_count,获得删除的数据条数

  返回的是一条字典型数据,{'ok':1,'n':1}

  另外,我们还可以对索引进行操作,比如 create_index() 创建单个索引,create_indexes()创建多个索引,drop_index()删除索引等方法。

参考:静觅博客   https://cuiqingcai.com/5584.html

Python爬虫数据保存到MongoDB中的更多相关文章

  1. 在scrapy中将数据保存到mongodb中

    利用item pipeline可以实现将数据存入数据库的操作,可以创建一个关于数据库的item pipeline 需要在类属性中定义两个常量 DB_URL:数据库的URL地址 DB_NAME:数据库的 ...

  2. Python将数据保存到CSV中

    #coding:utf-8import csv headers = ['ID','UserName','Password','Age','Country'] rows = [(1001,'qiye', ...

  3. 吴裕雄--天生自然python数据清洗与数据可视化:MYSQL、MongoDB数据库连接与查询、爬取天猫连衣裙数据保存到MongoDB

    本博文使用的数据库是MySQL和MongoDB数据库.安装MySQL可以参照我的这篇博文:https://www.cnblogs.com/tszr/p/12112777.html 其中操作Mysql使 ...

  4. 1.scrapy爬取的数据保存到es中

    先建立es的mapping,也就是建立在es中建立一个空的Index,代码如下:执行后就会在es建lagou 这个index.     from datetime import datetime fr ...

  5. 吴裕雄--天生自然PYTHON爬虫:安装配置MongoDBy和爬取天气数据并清洗保存到MongoDB中

    1.下载MongoDB 官网下载:https://www.mongodb.com/download-center#community 上面这张图选择第二个按钮 上面这张图直接Next 把bin路径添加 ...

  6. Excel文件数据保存到SQL中

    1.获取DataTable /// <summary> /// 查询Excel文件中的数据 /// </summary> /// <param name="st ...

  7. 将爬取的数据保存到mysql中

    为了把数据保存到mysql费了很多周折,早上再来折腾,终于折腾好了 安装数据库 1.pip install pymysql(根据版本来装) 2.创建数据 打开终端 键入mysql -u root -p ...

  8. c# 抓取和解析网页,并将table数据保存到datatable中(其他格式也可以,自己去修改)

    使用HtmlAgilityPack 基础请参考这篇博客:https://www.cnblogs.com/fishyues/p/10232822.html 下面是根据抓取的页面string 来解析并保存 ...

  9. Redis使用场景一,查询出的数据保存到Redis中,下次查询的时候直接从Redis中拿到数据。不用和数据库进行交互。

    maven使用: <!--redis jar包--> <dependency> <groupId>redis.clients</groupId> < ...

随机推荐

  1. 几个 BeanUtils 中的坑,千万别踩!

    背景 最近项目中在和第三方进行联调一个接口,我们这边发送http请求给对方,然后接收对方的回应,代码都是老代码. 根据注释,对方的SDK中写好的Request类有一个无法序列化的bug,所以这边重新写 ...

  2. [BZOJ4569] [Luogu 3295] [SCOI2016]萌萌哒(并查集+倍增)

    [BZOJ4569] [Luogu 3295] [SCOI2016]萌萌哒(并查集+倍增) 题面 有一个n位的十进制数a(无前导0),给出m条限制,每条限制\((l_1,r_1,l_2,r_2)(保证 ...

  3. ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;

    参考来源:https://blog.csdn.net/yuxinha11/article/details/80090197 ENGINE=InnoDB不是默认就是这个引擎吗?——是的,如果不写也是ok ...

  4. Hyper-V Centos7 虚拟机固定IP

    在网上看到很多篇文章,自己也去试验过,结果实现的效果都不是很理想,并不是自己所需要的,下面是我自己研究,最后成功的经验,希望能够帮到大家.少走一些弯路. 需求 1.无论物理机的网络环境怎么变化,都需要 ...

  5. redis 教程(一)-基础知识

    redis 简介 redis 是高性能的 key-value 数据库,读的速度是110000次/s,写的速度是81000次/s ,它以内存作为主存储 具有以下优点: 1. 支持数据的持久化,将内存中的 ...

  6. ps的一点快捷键

    选区工具快捷键(shift alt很重要) 按M键切换到选区工具 矩形选区-> shift 正方形 shift+m 矩形/椭圆来回切换 参考线:alt+v 选中上方的工具 alt+v+e 新建参 ...

  7. k3 cloud中单据体中文本自适应

    在单据体中添加多行文本,然后设置本地配置,只读单元格自动换行

  8. 关于spring 获取不到网站上的xsd的处理记录

    前两天做一个项目还好好的,今天突然报出这个错误 cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration ...

  9. 仿scikit-learn模式写的kNN算法

    一.什么是kNN算法 k邻近是指每个样本都可以用它最接近的k个邻居来代表. 核心思想:如果一个样本在特征空间中的k个最相邻的样本中大多数属于一个某类别,则该样本也属于这个类别. 二.将kNN封装成kN ...

  10. Linux之目录与路径

    特殊的目录: “.”,代表此层目录 “..”,代表上一层目录 “-”,代表前一个工作目录 “~”,代表“目前用户身份”所在的主文件夹 “~account”,代表account这个用户的主文件夹(acc ...