Python操作MongoDB基本使用

MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
MongoDB 文档类似于JSON 对象。字段值可以包含其他文档,数组及文档数组
PyMongo库里面的MongoClient,默认是27017

一、术语

SQL术语 MongoDB术语                 说明
database             database                   数据库
table               collection                 数据库表/集合
row                 document                   数据记录行/文档
colunmn             field                     数据字段/域
index               index                     索引

二、PyMongo模块常用方法

1、安装
	
	安装 python3 -m pip3 install pymongo
	指定版本安装 python3 -m pip3 install pymongo==3.5.1
	更新 python3 -m pip3 install --upgrade pymongo


2、链接MongoDB方法

	直接传入MongoDB的连接字符串,它以mongodb开头
	client = MongoClient('mongodb://localhost:27017/')

	连接MongoDB数据库
	    client = pymongo.MongoClient(host='XXXXXXXXXXX',
                               port=27017,
                               username='root',
                               pwd='XXXXXXXXXXXX')

3、指定数据库

    指定数据库,连接数据库'my_test',真正插入文档后才会创建
    	db = client.my_test
    	或者
    	db = client['my_test']


4、指定集合

    指定集合(例如:指定一个集合名称为students)
    	collection = db.students
    	或者
    	collection = db['students']


5、插入数据

 	python 3 官方已经不推荐使用insert()方法了,有警告,返回的是在执行后返回_id集合。

 	官方推荐使用:
     	insert_one() #插入一条数据,返回InsertOneResult对象,调用inserted_id属性,获取_id
     	insert_many() #插入多条记录,返回InsertOneResult对象,调用inserted_ids属性,获取_id

6、查询

	6.1 find_one()---查询单个结果

	# 查询name为Mike的数据,它的返回结果是字典类型
	result = collection.find_one({"name": "Mike"})
	print(result)  # 结果中_id属性,MongoDB在插入过程中自动添加的
	
	6.2 find()---查询多条数据,返回一个生成器对象
	results = collection.find({"age": 20})
	for i in results:
	    print(i)


	6.3 通过ObjectId来查询,此时需要使用bson库里面的objectid
	# from bson.objectid import ObjectId
	# 
	# result_id = collection.find_one({'_id': ObjectId('61234301f091fa942b77db7f')})
	# print(result_id)


	6.4比较符号归纳

		符号含义示例:
		$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]}}


    6.5正则匹配$regex

    	符号含义示例示例含义:
		$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'}自身粉丝数等于关注数


7、计数

	 # 不带有条件计数
	count = collection.estimated_document_count() 
	print(count)


	# 带有查询条件计数
	count1 = collection.count_documents({'age': 20})  
	print(f"age = 20的一共 {count1} 条数据")


8、排序

	直接调用sort()方法,并在其中传入排序的字段及升降序标志即可

	results = collection.find().sort('name', pymongo.ASCENDING)
	print([result['name'] for result in results])

	pymongo.ASCENDING------升序,1
	pymongo.DESCENDING-----降序,-1


9、更新
	update_one() # 更新一条
	update_many instead() # 更新多条
	

	condition = {'name': 'Mike'}
	student = collection.find_one(condition)
	student['age'] = 22
	result = collection.update_one(condition, {'$set': student})
	print(type(result))
	print(f"匹配的数据条数:{result.matched_count}, 影响的数据条数是:{result.modified_count}")

	# 在这里调用了update_one方法,第二个参数不能再直接传入修改后的字典,而是需要使用{'$set': student}这样的形式,
	# 其返回结果是UpdateResult类型,然后调用matched_count和modified_count属性分别可以获得匹配的数据条数和影响的数据条数。


10、删除

	delete_one()即删除第一条符合条件的数据,
	delete_many()即删除所有符合条件的数据。
	它们的返回结果都是DeleteResult类型,可以调用deleted_count属性获取删除的数据条数


	result = collection.delete_one({'name': 'Mike'})
	print(result)
	print(result.deleted_count)
	result = collection.delete_many({'age': {'$lt': 25}})
	print(result.deleted_count)

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值