![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=1738936884-myK3F3re2RHL60oWgmeFfnXJGTgiOTUA-0-618e5d4da377a95b2e9627320aa55dab)
代码运行结果如图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=1738936884-v1gWJKIRiWmZfqIhgK5a69s34knlHZgI-0-fc7985dc08e985e364655476c9706d7f)
图3-21
![img](https://epubservercos.yuewen.com/3DAE1E/17545851106441906/epubprivate/OEBPS/Images/txt003_42.jpg?sign=1738936884-xtqrd4IoxtS6dfWuthtWJ1M5gZdnCw4c-0-1148d06999186b5824917f573165cb96)
代码运行结果如图3-22所示。
由于这里目标是提取最低气温大于5摄氏度的城市名称,因此先将最低气温设置成整型数据。更新数据用sheet_weather.update_one(),其中update_one()方法用于指定更新一条数据,代码如下。
![img](https://epubservercos.yuewen.com/3DAE1E/17545851106441906/epubprivate/OEBPS/Images/txt003_43.jpg?sign=1738936884-HGKBC7kpDxHZOWQvrSclZeNfYd9gkRuQ-0-59afd3c870a27e2aeb854e35712e2e66)
这里第一个参数是{'_id':item['_id']},表示要更新的查询条件,对应_id字段。第二个参数表示要更新的信息,$set是MongoDB中的一个修改器,用于指定一个键并更新键值,若键不存在,则创建一个键。
![img](https://epubservercos.yuewen.com/3DAE1E/17545851106441906/epubprivate/OEBPS/Images/txt003_44.jpg?sign=1738936884-MEvpTk6XH0ktUcMdK98E2zf4NZOSF2ac-0-4aac8c76d7b2479454682dcaa7d916b9)
图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=1738936884-tGKj9iFJ5LaO6TNTA0Vv49W8OOJ4grh8-0-3105ad21cfadaf8b032933be4bc31b9d)
写成:
![img](https://epubservercos.yuewen.com/3DAE1E/17545851106441906/epubprivate/OEBPS/Images/txt003_46.jpg?sign=1738936884-RObjUMBbCf4808G85UElpvWKTjOFwXa6-0-8af696451a84945bed44d7e8746c37db)
数据更新完毕后,再用find()方法查找数据,其中$gt表示符号>。
![img](https://epubservercos.yuewen.com/3DAE1E/17545851106441906/epubprivate/OEBPS/Images/txt003_47.jpg?sign=1738936884-WW4pHMfE2vFqmK22BA0qv1jFiawxPQ9Q-0-27266d2f3289f695213b8fe1f5cf5f0f)
$lt、$lte、$gt和$gte分别表示符号<、、>和 。