【Python】MongoDB数据库安装和Pymongo操作学习

MongoDB简介

Mongo是一种非关系型数据库,相较于典型的关系型数据库(如Oracle,Mysql),访问速度更快,更适合于数据变化快的场景。

MongoDB数据库安装

这里使用的是MongoDB 4.4 版本:
下载链接:https://pan.baidu.com/s/14-acXNSbxS5vxAd3oPTK0g?pwd=8888

安装步骤图示:

在这里插入图片描述
在这里插入图片描述

安装好之后,会自动添加windows服务,可以在任务管理器的服务栏看到。

在这里插入图片描述
打开浏览器,访问http://localhost:27017/,显示下图内容,说明MongoDB服务正常运行。

在这里插入图片描述

Pymongo常规操作

Pymongo安装

Pymongo是一个python库,提供了方便的与MongoDB交互的API。
Pymongo安装:

pip install pymongo

创建数据库

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

#新建数据库
mydb = myclient["mydatabase"]

查询所有数据库

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 查询数据库
dblist = myclient.list_database_names()  # 获取数据库名
print(dblist)

输出:

[‘admin’, ‘config’, ‘local’]

这里输出了三个原始默认的数据库,并没有刚刚新建的数据库mydatabase
这是因为在 MongoDB 中,数据库创建后要创建集合(数据表)并插入一个文档(记录),数据库才会真正创建。

创建集合/插入文档

下面就创建一个集合并插入一条文档:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 新建数据库
mydb = myclient["mydatabase"]
# 创建集合
mycol = mydb["myset"]
# 插入文档
mydict = {
    
    "name": "zstar", "height": "185cm"}
mycol.insert_one(mydict)

运行之后,使用Navicat查看数据库,可以看到数据库和集合被成功创建,并自动为文档添加了唯一性标识。

在这里插入图片描述

插入多条文档

使用insert_many可以插入多条文档:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 新建数据库
mydb = myclient["mydatabase"]
# 创建集合
mycol = mydb["myset"]

# 插入多条文档
mylist = [
  {
    
    "name": "zstar", "height": "185cm"},
  {
    
    "name": "zstar", "height": "186cm"},
  {
    
    "name": "zstar", "height": "188cm"}
]
mycol.insert_many(mylist)

查询一条文档

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 新建数据库
mydb = myclient["mydatabase"]
# 创建集合
mycol = mydb["myset"]

# 查询一条文档
x = mycol.find_one()
print(x)

查询集合中所有文档

mycol.find()会返回一个pymongo.cursor.Cursor对象,通过循环可以读取:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 新建数据库
mydb = myclient["mydatabase"]
# 创建集合
mycol = mydb["myset"]

# 查询所有文档
for x in mycol.find():
    print(x)

查询指定字段

将需要的字段设为1,不需要的字段设为0,第一个{}指代查询所有内容。

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 新建数据库
mydb = myclient["mydatabase"]
# 创建集合
mycol = mydb["myset"]

# 查询指定字段
for x in mycol.find({
    
    }, {
    
    "_id": 0, "name": 1, "height": 1}):
    print(x)

查询符合条件的数据

查询所有"height": “185cm”`的数据:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 新建数据库
mydb = myclient["mydatabase"]
# 创建集合
mycol = mydb["myset"]

# 条件查询
for x in mycol.find({
    
    "height": "185cm"}):
    print(x)

比较条件查询

除了完全相等之外,还可以使用条件操作符来实现更多操作,例如:
查询身高大于185cm的人:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 新建数据库
mydb = myclient["mydatabase"]
# 创建集合
mycol = mydb["myset"]

# 条件查询
for x in mycol.find({
    
    "height": {
    
    "$gt": "185cm"}}):
    print(x)

常用条件操作符有:

  • (>) 大于 - $gt
  • (<) 小于 - $lt
  • (>=) 大于等于 - $gte
  • (<= ) 小于等于 - $lte

此外,还可以用"$regex"来进行正则表达式查询,这里数据较简单,暂略。

返回指定条数文档

通过limit()方式,可以限定返回的文档条数。

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 新建数据库
mydb = myclient["mydatabase"]
# 创建集合
mycol = mydb["myset"]

# 返回指定条数
myresult = mycol.find().limit(3)  # 查询前三条数据
# 输出结果
for x in myresult:
    print(x)

修改一条文档

使用update_one可以修改一条文档,如果满足修改条件的有多条文档,只会修改第一个。

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 新建数据库
mydb = myclient["mydatabase"]
# 创建集合
mycol = mydb["myset"]

# 修改一条文档
myquery = {
    
    "name": "zstar"}  # 将zstar修改为starz
newvalues = {
    
    "$set": {
    
    "name": "starz"}}
mycol.update_one(myquery, newvalues)
# 输出修改后的集合
for x in mycol.find():
    print(x)

修改多条文档

上面代码不变,将update_one替换成update_many,即可实现修改所有符合条件的文档。

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 新建数据库
mydb = myclient["mydatabase"]
# 创建集合
mycol = mydb["myset"]

# 修改多条文档
myquery = {
    
    "name": "zstar"}  # 将所有的zstar修改为starz
newvalues = {
    
    "$set": {
    
    "name": "starz"}}
mycol.update_many(myquery, newvalues)
# 输出修改后的集合
for x in mycol.find():
    print(x)

文档排序

使用sort可以对查询的文档进行排序,默认是升序,设置参数-1为降序。

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 新建数据库
mydb = myclient["mydatabase"]
# 创建集合
mycol = mydb["myset"]

# 排序
mydoc = mycol.find().sort("height")  # 升序
mydoc = mycol.find().sort("height", -1)  # 降序
for x in mydoc:
    print(x)

删除单条文档

delete_one用来删除单个符合条件的文档。

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 新建数据库
mydb = myclient["mydatabase"]
# 创建集合
mycol = mydb["myset"]

# 删除一条文档
myquery = {
    
    "height": "188cm"}
mycol.delete_one(myquery)
# 删除后输出
for x in mycol.find():
    print(x)

删除多条文档

和update类似,用delete_many替代delete_one即可:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 新建数据库
mydb = myclient["mydatabase"]
# 创建集合
mycol = mydb["myset"]

# 删除一条文档
myquery = {
    
    "height": "185cm"}
mycol.delete_many(myquery)
# 删除后输出
for x in mycol.find():
    print(x)

删除所有文档

将匹配条件设为空,则会删除所有文档:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 新建数据库
mydb = myclient["mydatabase"]
# 创建集合
mycol = mydb["myset"]

# 删除一条文档
myquery = {
    
    }
mycol.delete_many(myquery)
# 删除后输出
for x in mycol.find():
    print(x)

删除集合

文档删完了,集合也删了吧。

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

# 新建数据库
mydb = myclient["mydatabase"]
# 创建集合
mycol = mydb["myset"]
# 删除集合
mycol.drop()

总结

相比于之前经常使用的Mysql,MongoDB的操作显得更简单和轻量化,更适合对于安全性低,使用频繁的场景。

参考

[1] Mongodb介绍和安装(含安装包) https://blog.csdn.net/m0_45877477/article/details/125506862
[2] Python使用pymongo连接MongoDB数据库并进行操作 https://blog.csdn.net/qq_45268814/article/details/125937255

猜你喜欢

转载自blog.csdn.net/qq1198768105/article/details/129571703