![Python 3 爬虫、数据清洗与可视化实战(第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/935/32517935/b_32517935.jpg)
3.4 MongoDB数据库查询
基于3.3节的结果,查询北京的天气预报数据,代码如下。
![img](https://epubservercos.yuewen.com/3DAE1E/17545851106441906/epubprivate/OEBPS/Images/txt003_40.jpg?sign=1739227596-AglMh9uP13eLmCVy34dpKQr3H3bX77Em-0-84e48bc8e0ea2ad6285eaf8578da0bf1)
代码运行结果如图3-21所示。
查询的语法是sheet_weather.find(),其中sheet_weather代表weather数据库中的表格sheet_weather_3。
接下来查询最低气温大于5摄氏度的城市名称,代码如下。
![img](https://epubservercos.yuewen.com/3DAE1E/17545851106441906/epubprivate/OEBPS/Images/txt003_41.jpg?sign=1739227596-FH7Pfqz65G2TPzEYj1rEZfVc8SvCmTFO-0-f01d72c5de880a663880b40c71ca70d4)
图3-21
![img](https://epubservercos.yuewen.com/3DAE1E/17545851106441906/epubprivate/OEBPS/Images/txt003_42.jpg?sign=1739227596-2BbIwOmaKVRgjlmlh3Q1QTnumxz07W2B-0-37a585fb206511b64c0c7919fea777a8)
代码运行结果如图3-22所示。
由于这里目标是提取最低气温大于5摄氏度的城市名称,因此先将最低气温设置成整型数据。更新数据用sheet_weather.update_one(),其中update_one()方法用于指定更新一条数据,代码如下。
![img](https://epubservercos.yuewen.com/3DAE1E/17545851106441906/epubprivate/OEBPS/Images/txt003_43.jpg?sign=1739227596-ioKTwA6PnZ6fn4C2WUc4raqxBXH6xIfK-0-b6f781ad3c2b314e65ad3708c854d4fd)
这里第一个参数是{'_id':item['_id']},表示要更新的查询条件,对应_id字段。第二个参数表示要更新的信息,$set是MongoDB中的一个修改器,用于指定一个键并更新键值,若键不存在,则创建一个键。
![img](https://epubservercos.yuewen.com/3DAE1E/17545851106441906/epubprivate/OEBPS/Images/txt003_44.jpg?sign=1739227596-8tPxg3K7SBOsLEekW3gpEfXpiIZ8xT9H-0-a057d690bb976659c4863ff59f189aea)
图3-22
除此之外,常用的修改器还有$inc、$unset、$push等。
● $inc修改器:可以对文档的某个值为数字型(只能为满足要求的数字)的键进行增减操作。
● $unset修改器:用于删除键。
● $push修改器:向文档的某个数组类型的键添加一个数组元素,不过滤重复的数据。在添加时,若键存在,则要求键值类型必须是数组;若键不存在,则创建数组类型的键。
{'$set':{'**********.0.daily_forecast.{}.tmp.min'.format(i):int(tmp)}}是将**********.0.daily_
forecast.{}.tmp.min路径下的数据设置为int(整型),路径中间的{}中的数据由路径后的.format(i)指定,其内容就是format中的i变量。
下面是一些延伸内容。
可以将3.2节中的URL部分:
![img](https://epubservercos.yuewen.com/3DAE1E/17545851106441906/epubprivate/OEBPS/Images/txt003_45.jpg?sign=1739227596-Q6rGINPTDyHjeZTf0E1EiKoQMMZVrqNL-0-bb26ea641e10c07ceb3b51be8b2f469f)
写成:
![img](https://epubservercos.yuewen.com/3DAE1E/17545851106441906/epubprivate/OEBPS/Images/txt003_46.jpg?sign=1739227596-2k3LZse1JjXbCaDnTmoKxKzMyyHxi6eD-0-2bfa2ebf590bfc0e7de978fadab736ee)
数据更新完毕后,再用find()方法查找数据,其中$gt表示符号>。
![img](https://epubservercos.yuewen.com/3DAE1E/17545851106441906/epubprivate/OEBPS/Images/txt003_47.jpg?sign=1739227596-NCtXrcXibl4TYFxq9Ly2xe5688fzY0Gx-0-036c0e21afbfb4ec4ebf1b9ea8dfeb3b)
$lt、$lte、$gt和$gte分别表示符号<、、>和 。