这篇博客主要介绍了 pymongo 一些常用的操作,包括增删查改。
使用URL连接
import pymongo myclient = pymongo.MongoClient("mongodb://localhost:27017/")使用构造函数连接
import pymongo myclient = pymongo.MongoClient(self,localhost,27017)MongoClient构造函数:
MongoClient( self,
host=None,
port=None,
document_class=dict,
tz_aware=None,
connect=None,
type_registry=None,
**kwargs))
若数据库存在:使用特定数据库
若数据库不存在:创建数据库
若集合存在:使用特定集合
若集合不存在:创建集合
创建数据库
mycol = mydb[COLLECTION_NAME]创建集合( 表)
mycol = mydb[COLLECTION_NAME]增加一个文档(1行数据)
mydict = {"id":"0003","name": "王五", "balance": "636", "photo":"data:image/jpeg;base64,/9j/4AAQSk..." } x = mycol.insert_one(mydict)增加多个文档(多行数据)
mylist = [{ "id":"0003", "name": "王五", "balance": "636", "photo":"data:image/jpeg;base64,/9j/4AAQSk..." },{ "id":"0004", "name": "周六", "balance": "236", "photo":"data:image/jpeg;base64,/9j/4AAQSk..." }] x = mycol.insert_many(mylist)若制定唯一id值,使用"_id"
删除1条数据
myquery = { "name": "张三" } mycol.delete_one(myquery) # 删除后输出 for x in mycol.find(): print(x)删除多条数据
myquery = { "name": {"$regex": "^F"} } x = mycol.delete_many(myquery) print(x.deleted_count, "个文档已删除")查找 name 字段所有以 F 开头的文档,删除
删除所有文档
x = mycol.delete_many({}) print(x.deleted_count, "个文档已删除")delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档:
删除集合
mycol.drop()查看所有集合
collist = mydb. list_collection_names() if "sites" in collist: # 判断 sites 集合是否存在 print("集合已存在!")查询所有文档
for x in mycol.find(): print(x)查询一条文档
x = mycol.find_one() print(x)查询集合中的第一条数据
查询指定字段的数据
for x in mycol.find({},{ "_id": 0, "name": 1, "balance": 1}): print(x)查询制定条件的数据
特值查找
mydoc = mycol.find({ "name": "张三" }) for x in mydoc: print(x)范围查找
mydoc = mycol.find({ "name": { "$gt": "H" } }) for x in mydoc: print(x)读取 name 字段中第一个字母 ASCII 值大于 “H” 的数据,大于的修饰符条件为 {"$gt": “H”}
(>) 大于 - $gt(<) 小于 - $lt(>=) 大于等于 - $gte(<= ) 小于等于 - $lte正则匹配
myquery = { "name": { "$regex": "^R" } } mydoc = mycol.find(myquery) for x in mydoc: print(x)读取 name 字段中第一个字母为 “R” 的数据,正则表达式修饰符条件为 {"$regex": “^R”} :
查询指定数量的数据:limit() 方法
myresult = mycol.find().limit(3) # 输出结果 for x in myresult: print(x)修改一条数据
myquery = { "name": "张三" } newvalues = { "$set": { "name": "张二狗" } } mycol.update_one(myquery, newvalues) for x in mycol.find(): print(x)修改多条数据
myquery = { "name": { "$regex": "^F" } } newvalues = { "$set": { "age": "23" } } x = mycol.update_many(myquery, newvalues) print(x.modified_count, "文档已修改")查找所有以 F 开头的 name 字段,并将匹配到所有记录的 age 字段修改为 23: