4.5 MongoDB 文档存储

目录

[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'])

本人新手,若有错误,欢迎指正;若有疑问,欢迎讨论。若文章对你有用,点个小赞鼓励一下,谢谢,一起加油吧!

相关推荐
木易小熙20 分钟前
MySQL最左匹配原则是什么
数据库·mysql
Anna_Tong27 分钟前
全局流量管理:提升用户体验与保障服务稳定性
运维·服务器·网络·数据库·安全·负载均衡
番茄电脑全能王1 小时前
《鸣潮》运行时提示找不到emp.dll是什么原因?缺失emp.dll文件要怎么解决?
网络·数据库·经验分享·游戏·电脑
一只淡水鱼662 小时前
【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis
java·数据库·spring·mybatis
张声录12 小时前
【ETCD】【实操篇(十六)】基于角色的访问控制:ETCD 安全管理指南
数据库·安全·etcd
warrah2 小时前
redis——岁月云实战
数据库·redis·缓存
秀儿y2 小时前
Redis-十大数据类型
数据库·redis·缓存·oracle
凡人的AI工具箱2 小时前
每天40分玩转Django:Django类视图
数据库·人工智能·后端·python·django·sqlite
路在脚下@2 小时前
MySQL的索引失效的原因有那些
数据库·mysql
凡人的AI工具箱2 小时前
每天40分玩转Django:实操图片分享社区
数据库·人工智能·后端·python·django