用 Python 畅玩 Line bot - 13:MongoDB 操作

连接资料库与资料表

连接到对应的资料库与资料表:

import pymongo

myclient = pymongo.MongoClient('mongodb+srv://<username>:<password>@cluster0.4ejzf.gcp.mongodb.net/test') # 要连结到的 connect string
mydb = myclient["资料库名称"] # 指定资料库
mycol = mydb["资料表名称"] # 指定资料表

新增

在已有的资料表建立一笔新的资料:

x = mycol.insert_one({"PlayerName": "Testname","PlayerId":1,"Status": 0,"Data": []})

print(x.inserted_id) # 输出该新增资料的 id 编号

在已有的资料表建立多笔新的资料:

players_list = [
{"PlayerName": "Testname1","PlayerId":1,"Status": 0,"Data": []},
{"PlayerName": "Testname2","PlayerId":1,"Status": 0,"Data": []},
{"PlayerName": "Testname3","PlayerId":2,"Status": 0,"Data": []}
]

x = mycol.insert_many(players_list)

print(x.inserted_id) # 输出所有新增资料的 id 编号

在已有的资料表建立多笔指定 id 的新的资料:

players_list = [
{ "_id": 1, "PlayerName": "Testname1","PlayerId":1,"Status": 0,"Data": []},
{ "_id": 2, "PlayerName": "Testname2","PlayerId":1,"Status": 0,"Data": []},
{ "_id": 3, "PlayerName": "Testname3","PlayerId":2,"Status": 0,"Data": []}
]

x = mycol.insert_many(players_list)

print(x.inserted_id) # 输出所有新增资料的 id 编号

删除

删除符合条件的一笔资料:

mycol.delete_one({"PlayerId":event.source.user_id})

删除符合条件的多笔资料:

del_players = { "PlayerName": {"$regex": "^F"} } #删除所有 PlayerName 栏位中以 F 开头的资料
 
x = mycol.delete_many(del_players)
 
print(x.deleted_count, "笔资料删除完毕")

当不给予 delete_many() 任何条件时,会删除资料表内所有资料

x = mycol.delete_many({})
 
print(x.deleted_count, "笔资料删除完毕")

查询

当不给予 find_one() 条件,则输出第一笔资料

x = mycol.find_one()
 
print(x)

搜寻所有的资料

for x in mycol.find():
  print(x)

搜寻所有资料的部分栏位,0为不显示,1为显示,除了 id 以外不可同时指定两个栏位分别为0 与 1:

for x in mycol.find({},{ "_id": 0, "PlayerName": 1, "Status": 1 }):
  print(x)

搜寻符合指定条件的栏位

mydoc = mycol.find({ "PlayerName": "Testname1" })

只回传指定数量的搜寻结果

myresult = mycol.find().limit(3)

for x in myresult:
  print(x)

修改

只修改符合条件的第一笔资料

myquery = { "Status": "0" }
newvalues = { "$set": { "Status": "1" } }
 
mycol.update_one(myquery, newvalues)

修改符合条件的所有资料

myquery = { "Status": "0" }
newvalues = { "$set": { "Status": "1" } }
 
mycol.update_many(myquery, newvalues)

<<:  Day30 - 【概念篇】Open-ID Connect & Social Login(1)

>>:  D36-铁人赛完赛心得

第58天~

这个得上一篇:https://ithelp.ithome.com.tw/articles/10261...

DAY 22 『 连接 API 实作 - 天气 APP 』Part4

昨天介绍了如何将资料显示在手机画面上,今天会介绍如何辨别点选到哪一个城市,以及将城市天气资讯回传到手...

Day2-LeetCode 118. Pascal's Triangle

Problem: 118. Pascal's Triangle(Easy) Pascal's Tri...

Day_27:让 Vite 来开启你的Vue之 跌入深坑偶像剧_ v-if & v-for 他俩不能在一起啊

Hi Dai Gei Ho~ 我是 Winnie ~ 今天的文章中,我们要来说说 v-if & v-...