PyMongo 修改数据

2,315 阅读1分钟

这是我参与更文挑战的第27天,活动详情查看:更文挑战

如果❤️我的文章有帮助,欢迎评论、关注、点赞。这是对我继续技术创作最大的鼓励。更多往期文章在我的个人博客

删除数据

比如刚刚新增的时候,我们发现 李四-英语成绩重复插入了,所以我们应该删除其中一条可以如下操作:

ret2delete = collect.delete_one({"student_name" : "李四", "subject" : "英语"})
print(ret2delete)
# <pymongo.results.DeleteResult object at 0x000001D4AA0D15C8>

全部删除呢?

ret2delete = collect.delete_many({"student_name" : "李四", "subject" : "英语"})
print(ret2delete)

修改数据

比如我们发现 之前新增 考试得分数据,缺少考试时间。我们需要更新数据,可以这么做:

# 更新单个
ret2update = collect.update_one({"class_name" : "高三(1)班"},{ "$set":{"date":"20200301"} })
print(ret2update.matched_count) # 1

# 更新多个
ret2update = collect.update_many({"class_name" : "高三(1)班"},{ "$set":{"date":"20200301"} })
print(ret2update.matched_count) # 3

$set的意义在于 告诉 pymongo 我只更新 文档中的 date 字段,其他字段不变;如果缺乏 $set,则会使用 {"date":"20200301"} } 替换整个文档

除了$set,还有 $inc 满足自增、自减操作如下:

ret2update = collect.update_one({"class_name" : "高三(1)班"},{ "$inc":{"score":"1"} })

ret2update = collect.update_one({"class_name" : "高三(1)班"},{ "$inc":{"score":"-0.5"} })
print(ret2update.matched_count) # 3

而且从 mongodb 的官方文档,我们可以得知 $inc 为原子操作,适合并发情况下的应用 图片描述

其他操作

查询出部分我们想要的数据后,剩下的就是聚合操作了:

统计数量

totalnum = collect.find().count()

排序

排序时,直接调用 sort() 方法,并在其中传入排序的字段及升降序标志即可。示例如下:

results = collect.find().sort('name', pymongo.ASCENDING)
print([result['name'] for result in results])

分页

分页时调用 skip() 偏移方法,limit() 指定结果数

results = collect.find().sort('name', pymongo.ASCENDING).skip(2).limit(2)
print([result['name'] for result in results])