温馨提示:
本文最后更新于 2022-12-13,已超过半年没有更新,若内容或图片失效,请留言反馈。
pymongo 版本要跟安装的mongo要对应上,要不会报错
3.X要对应3.X
4.X对应4.X
建立连接,指定数据库、集合
import pymongoclient = pymongo.MongoClient(host='localhost',port=27017)#client = pymongo.MongoClient('mongodb://localhost:27017/')db = client.test#db = client['test']collection = db.player#collection = db['player']
增: insert_one(), insert_many() 旧的insert已废除,不要用了
player1 = {'name':'Harden','team':'Rockets','feature':'beard'}player2 = {'name':'Durant','team':'Warriors','feature':'farm-worker'}player3 = {'name':'James','team':'Lakers','feature':'King'}player_list = [player1,player2,player3]collection.insert_one(player1)collection.insert_many(player_list)
查: find_one(), find(),需要注意的是 find_one返回的是一个结果,而 find() 返回的是一个生成器,要通过遍历才能得到结果
print(collection.find_one({'name':'James'}))
删: delete_one()是删除第一个符合条件的数据,delete_many()是删除所有符合条件的数据
for i in player_list: collection.delete_one(i)
可嵌套正则,查找名字开头不是D的球员,并按球队(字母顺序)排序
for i in collection.find({'name':{'$regex':'^[^D]'}}).sort('team'): print(i)
改: update_one(), update_many(); 第一个参数是条件,第二个参数是修改内容,必须以 $ 类型操作符作为键名
collection.update_one({'name':'Harden'},{'$set':{'name':'James Harden'}})collection.update_one({'name':'Paul'},{'$set':{'name':'Chris Paul'}},upsert = True)
upsert 参数默认为 False,意为不增加,如果满足第一个参数(条件)的文档不存在,而 upsert = True, 则直接添加这个文档(document), 即多增加一条记录
聪明的同学肯定想到了,我们能否用 update_one 来取代 insert_one 以避免重复值的插入呢?
没错,答案是可以的。
用 insert_one的话,即使是重复的数据也会插入,一共产生4个文档
```pythonplayer1 = {'name':'Harden','team':'Rockets','feature':'beard'}player2 = {'name':'Durant','team':'Warriors','feature':'farm-worker'}player3 = {'name':'James','team':'Lakers','feature':'King'}player4 = {'name':'Harden','team':'Rockets','feature':'beard'}player_list = [player1,player2,player3,player4]for i in player_list: collection.insert_one(i)print(collection.find().count()) #4
而用 update_one 只产生3个文档
player_list = [player1,player2,player3,player4]for i in player_list: collection.update_one(i,{'$set':i},upsert=True)print(collection.find().count()) #3
评论一下?