菜鸟如何用python操作MongoDB?( 三 )

这时需要记录好上次查询的_id 。
9.更新数据库
对于数据更新,我们可以使用update()方法,指定更新的条件和更新后的数据即可 。例如:
condition = {'name': 'Kevin'}student = collection.find_one(condition)student['age'] = 25result = collection.update(condition, student)print(result)这里我们要更新name为Kevin的数据的年龄:首先指定查询条件,然后将数据查询出来,修改年龄后调用update()方法将原条件和修改后的数据传入 。
运行结果如下:
{'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}返回结果是字典形式,ok代表执行成功,nModified代表影响的数据条数 。
另外,我们也可以使用$set操作符对数据进行更新,代码如下:
result = collection.update(condition, {'$set': student})这样可以只更新student字典内存在的字段 。如果原先还有其他字段,则不会更新,也不会删除 。而如果不用$set的话,则会把之前的数据全部用student字典替换;如果原本存在其他字段,则会被删除 。
另外,update()方法其实也是官方不推荐使用的方法 。这里也分为update_one()方法和update_many()方法,用法更加严格,它们的第二个参数需要使用$类型操作符作为字典的键名,示例如下:
condition = {'name': 'Kevin'}student = collection.find_one(condition)student['age'] = 26result = collection.update_one(condition, {'$set': student})print(result)print(result.matched_count, result.modified_count)这里调用了update_one()方法,第二个参数不能再直接传入修改后的字典,而是需要使用{'$set': student}这样的形式,其返回结果是UpdateResult类型 。然后分别调用matched_count和modified_count属性,可以获得匹配的数据条数和影响的数据条数 。
运行结果如下:
<pymongo.results.UpdateResult object at 0x10d17b678>1 0我们再看一个例子:
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 0x10b8874c8>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 0x10c6384c8>3 3可以看到,这时所有匹配到的数据都会被更新 。
10.数据删除
删除操作比较简单,直接调用remove()方法指定删除的条件即可,此时符合条件的所有数据均会被删除 。示例如下:
result = collection.remove({'name': 'Kevin'})print(result)运行结果如下:
{'ok': 1, 'n': 1}另外,这里依然存在两个新的推荐方法——delete_one()和delete_many() 。示例如下:
result = collection.delete_one({'name': 'Kevin'})print(result)print(result.deleted_count)result = collection.delete_many({'age': {'$lt': 25}})print(result.deleted_count)运行结果如下:
<pymongo.results.DeleteResult object at 0x10e6ba4c8>14delete_one()即删除第一条符合条件的数据,delete_many()即删除所有符合条件的数据 。它们的返回结果都是DeleteResult类型,可以调用deleted_count属性获取删除的数据条数 。

【菜鸟如何用python操作MongoDB?】


推荐阅读