【Python3 爬虫学习笔记】数据存储 6 -- MongoDB存储 2

更新

对于数据更新,我们可以使用update()方法,指定更新的条件和更新后的数据即可。例如:

condition = {'name': 'Kevin'}
student = collection.find_one(condition)
student['age'] = 25
result = collection.update(condition, student)
print(result)

这里我们要更新name为Kevin的数据的年龄:首先指定查询条件,然后将数据查询处理,修改年龄后调用update()方法将原条件和修改后的数据传入。
返回结果是字典形式,ok代表执行成功,nModified代表影响的数据条数。
另外,我们也可以使用$set操作符对数据进行更新,代码如下:

result = collection.update(condition, {'$set': student})

这样可以只更新student字典内存在的字段。如果原先还有其他字段,则不会更新,也不会删除。而如果不用 s e t 的 话 , 则 会 把 之 前 的 数 据 全 部 用 s t u d e n t 字 典 替 换 ; 如 果 原 本 存 在 其 他 字 段 , 则 会 被 删 除 。 另 外 , u p d a t e ( ) 方 法 其 实 也 是 官 方 不 推 荐 使 用 的 方 法 。 这 里 也 分 为 u p d a t e o n e ( ) 方 法 和 u p d a t e m a n y ( ) 方 法 , 用 法 更 加 严 格 , 它 们 的 第 二 个 参 数 需 要 使 用 set的话,则会把之前的数据全部用student字典替换;如果原本存在其他字段,则会被删除。 另外,update()方法其实也是官方不推荐使用的方法。这里也分为update_one()方法和update_many()方法,用法更加严格,它们的第二个参数需要使用 setstudentupdate()使updateone()updatemany()使类型操作符作为字典的键名,示例如下:

condition = {'name': 'Kevin'}
student = collection.find_one(condition)
student['age'] = 26
result = collection.update_one(condition, {'$set':student})
print(result)
print(result.matched_count, result.modified_count)

这里调用了update_one()方法,第二个参数不能再直接传入修改后的字典,而是需要使用{’$set’:student}这样的形式,其返回结果是UpdateResult类型。然后分别调用matched_count和modified_conunt属性,可以获得匹配的数据条数和影响的数据条数。
运行结果如下:

<pymongo.results.UpdateResult object at 0x000001AA9AF43548>
1 1

另外一个例子:

condition = {'age':{'$gt':20}}
result = collection.update_one(condition, {'$inc':{'age':1}})
print(result)
print(result.matched_count, result.modified_count)

这里指定查询条件为年龄大于20,然后更新条件为{’$inc’:{‘age’:1}},也就是年龄加1,执行之后会将第一条符合条件的数据年龄加1。
运行结果如下:

<pymongo.results.UpdateResult object at 0x000001AA9B1F1888>
1 1

可以看到匹配条数为1条,影响条数为1条。
如果调用update_many()方法,则会将所有符合条件的数据都更新,示例如下:

condition = {'age':{'$gt':20}}
result = collection.update_many(condition,{'$inc':{'age':1}})
print(result)
print(result.matched_count, result.modified_count)

这时匹配条件就不再为1条了,运行结果如下:

<pymongo.results.UpdateResult object at 0x000001AA9B1BC908>
5 5

可以看到,这时所有匹配到的数据都会被更新。

删除

删除操作比较简单,直接调用remove()方法指定删除的条件即可,此时符合条件的所有数据均会被删除。示例如下:

result = collection.remove({'name':'Kevin'})
print(result)

运行结果如下:

d:\Anaconda3\Scripts\ipython:1: DeprecationWarning: remove is deprecated. Use delete_one or delete_many instead.
{'n': 1, 'ok': 1.0}

另外,根据提示可以看出,这里依然存在两个新的推荐方法——delete_one()和delete_many()方法。delete_one()即删除第一条符合条件的数据,delete_many()即删除所有符合条件的数据。它们的返回结果都是DeleteResult类型,可以调用deleted_count属性获取删除的数据条数。

其他操作

另外,PyMongo还提供了一些组合方法,如find_one_and_delete()、find_one_and_replace()和find_one_and_update(),它们是查找后删除、替换和更新操作,其用法与上述方法基本一致。
另外,还可以对索引进行操作,相关方法有create_index()、create_indexes()和drop_index()等。

你可能感兴趣的:(学习笔记)