mongodb和python交互
mongodb和python交互
安装环境
pip install pymongo==4.2.0
官方文档:https://pymongo.readthedocs.io/en/stable/
使用样例
引入包pymongo
import pymongo
连接,创建客户端
client = pymongo.MongoClient("localhost", 27017)
client = pymongo.MongoClient('mongodb://localhost:27017/')
获得数据库test1
db = client.test1
db = client['test']
获得集合movie
collection = db.movie
collection = db['movie']
添加数据
#增加一条
m1={name:'300集',actor:'高总',level:10}
m1_id = movie.insert_one(s1).inserted_id
#增加多条
mids = movie.insert_many([movie1,movie2])
注意
原insert方法也可以实现上面的功能,但是在PyMongo 3.x的版本已经不推荐使用了
查找数据
- find() 返回一个生成器对象
- find_one() 返回一条数据
result = movie.find_one() result = movie.find_one({'name':'300集'}) result = movie.find_one({'_id':OjectId('5932a80115c2606a59e8a049')}) result = movie.find_one({level:{'$gt':1}}) results = movie.find()
比较符号
符号 含义 示例 $lt 小于 {'age': {'$lt': 20}} $gt 大于 {'age': {'$gt': 20}} $lte 小于等于 {'age': {'$lte': 20}} $gte 大于等于 {'age': {'$gte': 20}} $ne 不等于 {'age': {'$ne': 20}} $in 在范围内 {'age': {'$in': [20, 23]}} $nin 不在范围内 {'age': {'$nin': [20, 23]}} 功能符号
符号 含义 示例 示例含义 $regex 匹配正则表达式 {'name': {'$regex': '^M.*'}} name以M开头 $exists 属性是否存在 {'name': {'$exists': True}} name属性存在 $type 类型判断 {'age': {'$type': 'int'}} age的类型为int $mod 数字模操作 {'age': {'$mod': [5, 0]}} 年龄模5余0 $text 文本查询 {'$text': {'$search': 'Mike'}} text类型的属性中包含Mike字符串 $where 高级条件查询 {'$where': 'obj.fans_count == obj.follows_count'} 自身粉丝数等于关注数 获取文档个数
-
count = movie.count_documents()
排序
-
results = collection.find().sort('name', pymongo.ASCENDING)
偏移/分页
collection.find().sort('name', pymongo.ASCENDING).skip(2).limit(2)
更新
result = collection.remove({'name': '300集'}) # 4.2版本不支持 result = collection.delete_one({'name': '300集'}) result = collection.delete_many({'age': {'$lt': 25}})
注意
update也可以实现上面的功能,但是在PyMongo 3.x的版本已经不推荐使用了
删除
-
result = collection.remove({'name': '300集'}) # 4.2版本不支持 result = collection.delete_one({'name': '300集'}) result = collection.delete_many({'age': {'$lt': 25}})
# pip install pymongo==4.2.0 import pymongo # 创建链接 client = pymongo.MongoClient() # 获取数据库实例 db1 = client.bjsxt db2 = client['bjsxt'] # 获取集合 c1 = db1.student c2 = db2['person'] # 操作数据 def add_data(): ''' 添加数据 ''' data1 = {'name':'张三','age':20,'score':100} data2 = {'name':'李四','age':22,'score':110} # c1.insert_one(data1) c1.insert_many([data1,data2]) def update_data(): # 改 args = {'name':'张三'} # c1.update_one(args,{'$set':{'age':24}}) c1.update_many(args,{'$set':{'age':23}}) def delete_data(): # 删除 c1.delete_one({'name':'张三'}) # 删除所有 # c1.delete_many({}) def search_data(): # 查询数据 rs1 = c2.find() #获取游标对象,需要遍历 for r in rs1: print(r) # rs2 = c2.find_one() # print(rs2) def search_data_arg(): # 查询数据 rs1 = c2.find({'age':{'$gt':20}}) #获取游标对象,需要遍历 for r in rs1: print(r) def search_data_func(): # 查询数据 # rs1 = c2.find({'age':{'$gt':20}}).sort('age') #获取游标对象,需要遍历 # rs1 = c2.find({'age':{'$gt':20}}).sort('age',pymongo.ASCENDING) #升序 # rs1 = c2.find({'age':{'$gt':20}}).sort('age',pymongo.DESCENDING) #降序 # 分页 # rs1 = c2.find({'age':{'$gt':20}}).sort('age',pymongo.DESCENDING).skip(4) #降序 rs1 = c2.find({'age':{'$gt':20}}).sort('age',pymongo.DESCENDING).skip(4).limit(6) #降序 for r in rs1: print(r) def search_data_count(): count = c2.count_documents({}) print(f'目前集合中有{count}条数据') if __name__ == '__main__': # add_data() # update_data() # delete_data() # search_data() # search_data_arg() # search_data_func() search_data_count()