目录
[1. 相关安装](#1. 相关安装)
[2. Pycharm可视化观察MongoDB](#2. Pycharm可视化观察MongoDB)
[3. python使用 MongoDB 最初流程代码](#3. python使用 MongoDB 最初流程代码)
[4. 插入、查询、更新、删除数据](#4. 插入、查询、更新、删除数据)
[4.1 插入数据](#4.1 插入数据)
[4.2 查询数据](#4.2 查询数据)
[4.3 更新数据](#4.3 更新数据)
[4.3.1 更新一条数据](#4.3.1 更新一条数据)
[4.3.2 更新多条数据](#4.3.2 更新多条数据)
[4.4 删除数据](#4.4 删除数据)
[5. 计数、排序、偏移](#5. 计数、排序、偏移)
[5.1 计数](#5.1 计数)
[5.2 排序](#5.2 排序)
[5.3 偏移](#5.3 偏移)
1. 相关安装
MongoDB数据库安装(注意自己的文件路径):MongoDB的安装配置教程(很详细,你想要的都在这里)_mongodb安装-CSDN博客
python语言使用该数据库要安装pymongo数据包:
打开,conda install pymongo
2. Pycharm可视化观察MongoDB
在Pycharm右侧或者左下角找到下图1图标,然后按步骤进行。
之后改个数据源名称,MongoDB不需要密码(如果一直连接不上,可能是没启动MongoDB),若弹出要下载啥的,直接下载,之后点确定,就可在右侧看到之后对MongoDB的操作。
3. python使用 MongoDB 最初流程代码
导入pymongo库,创建连接对象,指定数据库,指定集合(相对于mysql的表)
python
import pymongo
client = pymongo.MongoClient("mongodb://localhost:27017/") # 1、创建连接对象
# client = pymongo.MongoClient(host='localhost', port=27017) # 同上效果
db = client.test # 2、指定数据库test(会直接创建一个数据库)
collection = db.students # 3、指定集合students
在右侧可看到结果如下(没出现,点击两个循环箭头的刷新就好):
4. 插入、查询、更新、删除数据
在基本代码下进行以下操作。
4.1 插入数据
collection.insert_one()插入一条数据(数据为字典),返回的是InsertOneResult 对象,可用inserted_id来获取_id;(个人认为,这里的_id相当于mysql的主键)
collection.insert_many()插入多条数据,参数为包含多个字典的列表。返回的是InsertManyResult 对象,可用inserted_ids来获取多个数据的_id;
python
student1 = {
'id': '100',
'name': '小明',
'age': 20,
'gender': '男'
}
result1 = collection.insert_one(student1)
print(result1, result1.inserted_id)
student2 = {
'id': '101',
'name': '小红',
'age': 22,
'gender': '女'
}
student3 = {
'id': '102',
'name': '小强',
'age': 26,
'gender': '男'
}
result2 = collection.insert_many([student2, student3])
print(result2, result2.inserted_ids)
结果如下:
4.2 查询数据
使用collection.find_one()查询一条数据,参数是一个字典,返回一个字典,_id属性是自动添加的。
collection.find()可查询多条数据,返回一个生成器,用for 遍历出来结果。下面是查询年龄小于25岁的,这时需要比较符号。
python
data = collection.find_one({"id": '101'})
print(type(data), data)
data2 = collection.find({'age': {'$lt': 25}})
print(data2)
for data in data2:
print(data)
比较符号如下:
还可以进行正则匹配,需要功能符号,如下:
4.3 更新数据
在sduents表中的数据为:
4.3.1 更新一条数据
现要更新第一条数据的年龄,首先要知道这条数据的辨识条件conditon,之后使用 collection.update_one()去更改,第一个参数为conditon,第二个参数是个字典,要使用$set操作符作为键,值为数据对象及更改内容。
python
condition = {'age': 20}
result = collection.update_one(condition, {'$set': {'age': 30}})
print(result) # 输出:<pymongo.results.UpdateResult object at 0x000001D9787F07C0>
# 上个输出不唯一,每次都可能不同
print(result.matched_count, result.modified_count) # 匹配条数和影响条数 输出: 1 1
4.3.2 更新多条数据
现要将年龄大于25岁学生年龄都加一,代码如下:
python
condition = {'age': {'$gt': 25}}
result = collection.update_many(condition, {'$inc': {'age': 1}})
print(result)
print(result.matched_count, result.modified_count) # 输出:2 2
结果如下:
如果该条件下的数据只要一条,使用update_many()会报错。
4.4 删除数据
collection.remove()可删一条和多条数据,collection.delete_one()和collection.delete_many()删除一条和多条。
python
result1 = collection.remove({'age': {'$lt': 25}}) # 也可删多条数据
# collection.delete_one({'age': {'$lt':25}}) # 删一条
# 上面的remove()方法官方不推荐使用,会报警告
print(result1)
result2 = collection.delete_many({'age': {'$gt': 25}})
print(result2, result2.deleted_count)
5. 计数、排序、偏移
初始集合:
以下代码在最初流程代码后进行。
5.1 计数
python
number1 = collection.find().count()
print(number1) # 3
number2 = collection.count() # 所有数据条数
print(number2) # 3
number3 = collection.find({'age':{'$lt': 25}}).count()
print(number3) # 2
# 上述都会报警告,但会正常进行
number4 = collection.count_documents({'age': {'$lt': 25}})
print(number4) # 不警告,但不加参数会报错
5.2 排序
python
results = collection.find().sort("id", pymongo.ASCENDING)
# pymongo.ASCENDING为顺序,pymongo.DESCENDING为倒序
for result in results:
print(result, result['id'])
5.3 偏移
利用skip()方法跳过前几个,limit()方法会限制获取结果。现在对上述结果进行跳过第一个,只要一个结果:
python
results = collection.find().sort("id", pymongo.DESCENDING).skip(1).limit(1)
for result in results:
print(result, result['id'])
本人新手,若有错误,欢迎指正;若有疑问,欢迎讨论。若文章对你有用,点个小赞鼓励一下,谢谢,一起加油吧!