以下学习笔记参考自:
https://github.com/datawhalechina/fun-rec/blob/master/docs/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F%E5%AE%9E%E6%88%98/2.2%E6%96%B0%E9%97%BB%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F%E5%AE%9E%E6%88%98/docs/2.2.1.2%20MongoDB%E5%9F%BA%E7%A1%80.md
PyMongo安装
pip install pymongo
创建数据库,集合以及插入文档
注:在 MongoDB 中,数据库只有在内容插入后才会创建! 就是说,数据库创建后要创建集合(数据表)并插入一个文档(记录),数据库才会真正创建。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
#切换到数据库tobytest,没有则创建
mydb = myclient["tobytest"]
#到集合col_set,没有则创建
mycol = mydb["col_set"]
collist=mydb.list_collection_names()
#此处打印的集合名中不包含col_set,因为并未插入文档
print(collist)
mydict = { "name": "Toby", "age": "23", "url": "https://juejin.cn/user/3403743731649863" }
#集合中插入文档使用 insert_one() 方法,该方法的第一参数是字典 name => value 对。
x = mycol.insert_one(mydict)
print(x)
collist=mydb.list_collection_names()
print(collist)
插入多个文档
集合中插入多个文档使用 insert_many() 方法,该方法的第一参数是字典列表。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["tobytest"]
mycol = mydb["col_set"]
mylist = [
{ "name": "Tom", "age": "100", "url": "https://juejin.cn/user/3403743731649863" },
{ "name": "Mary", "age": "101", "url": "https://juejin.cn/user/3403743731649863" },
{ "name": "Timi", "age": "10", "url": "https://juejin.cn/user/3403743731649863" },
]
x = mycol.insert_many(mylist)
# 输出插入的所有文档对应的 _id 值
print(x.inserted_ids)
Python Mongodb 查询文档
MongoDB 中使用了 find 和 find_one 方法来查询集合中的数据,类似于 SQL 中的 SELECT 语句。
查询一条数据
我们可以使用 find_one() 方法来查询集合中的一条数据。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["tobytest"]
mycol = mydb["col_set"]
x = mycol.find_one()
print(x)
查询集合中所有数据
find() 方法可以查询集合中的所有数据,类似 SQL 中的 SELECT * 操作。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["tobytest"]
mycol = mydb["col_set"]
for x in mycol.find():
print(x)
查询指定字段的数据
我们可以使用 find() 方法来查询指定字段的数据,将要返回的字段对应值设置为 1。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["tobytest"]
mycol = mydb["col_set"]
for x in mycol.find({},{ "_id": 0, "name": 1, "age": 1 }):
print(x)
根据指定条件查询
我们可以在 find() 中设置参数来过滤数据。
以下实例查找 name 字段为 “Toby” 的数据:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["tobytest"]
mycol = mydb["col_set"]
myquery = { "name": "Toby" }
mydoc = mycol.find(myquery)
for x in mydoc:
print(x)
返回指定条数记录
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["tobytest"]
mycol = mydb["col_set"]
#此处返回2条文档记录
myresult = mycol.find().limit(2)
# 输出结果
for x in myresult:
print(x)
Python Mongodb 修改文档
我们可以在 MongoDB 中使用 update_one() 方法修改文档中的记录。该方法第一个参数为查询的条件,第二个参数为要修改的字段。
如果查找到的匹配数据多于一条,则只会修改第一条。
以下实例将 age字段的值 23改为 12345:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["tobytest"]
mycol = mydb["col_set"]
myquery = { "age": "23" }
newvalues = { "$set": { "age": "12345" } }
mycol.update_one(myquery, newvalues)
# 输出修改后的 "sites" 集合
for x in mycol.find():
print(x)
排序
sort() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["tobytest"]
mycol = mydb["col_set"]
#默认升序排序
mydoc = mycol.find().sort("age")
for x in mydoc:
print(x)
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["pydb"]
mycol = mydb["col_set"]
#对字段 age按降序排序
mydoc = mycol.find().sort("age", -1)
for x in mydoc:
print(x)
Python Mongodb 删除数据
可以使用 delete_one() 方法来删除一个文档,该方法第一个参数为查询对象,指定要删除哪些数据。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["tobytest"]
mycol = mydb["col_set"]
myquery = { "name": "Timi" }
mycol.delete_one(myquery)
# 删除后输出
for x in mycol.find():
print(x)
删除集合中的所有文档
delete_many()
方法如果传入的是一个空的查询对象,则会删除集合中的所有文档:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["tobytest"]
mycol = mydb["col_set"]
x = mycol.delete_many({})
for x in mycol.find():
print(x)
结果无输出,因为所有文档都被删除了
删除集合
可以使用drop()
方法来删除一个集合。以下实例删除了 col_set集合:
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["tobytest"]
mycol = mydb["col_set"]
mycol.drop()
可以看到数据库中已经没有col_set集合了