文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python 操作 MongoDB 基础讲解

2024-12-03 10:28

关注

[[385197]]

文档型数据库通常是以JSON或XML格式存储数据,而Mongodb使用的数据结构是BSON,即二进制JSON。和JSON相比,BSON提高了存储和扫描效率,但空间占用会更多一些。

本文默认已经安装了MongoDB服务器,着重介绍Python操作MongoDB的库PyMongo,在命令行中输入如下内容安装:

 

  1. # Windows 
  2. pip install pymongo 
  3. # Mac 
  4. pip3 install pymongo 

一、连接服务器

连接服务器需要提供一个地址和接口

 

  1. import pymongo 
  2. client = pymongo.MongoClient(host='localhost', 27017) 
  3. # 地址和端口也可以用一个字符串完成 
  4. client = pymongo.MongoClient('mongodb://localhost:27017/'

27017 是默认端口。如果设置过密码进行连接就不能简单使用上面的代码了,需要在代码中带上密码:

 

  1. import pymongo 
  2. client = pymongo.MongoClient(host='localhost', 27017) 
  3. auth = mongo_client.admin 
  4. auth.authenticate('用户名''密码'

连接服务器可以用下面的代码判断是否成功:

 

  1. print(client.server_info())  

二、获取数据库

获取数据库有以下两种表述方法(以数据库 data 为例):

 

  1. # 方法一 
  2. db = client['data'
  3. # 方法二 
  4. db = client.data 

另外需要说明,MongoDB不需要提前创建好数据库,而是直接使用,如果发现没有则自动创建一个 testdb 的数据库:

 

  1. db = client.testdb 

三、获取集合

非关系型数据库中的集合类似于关系型数据库中的表获取集合与获取数据库类似,同样有两种方法(以集合 practice 为例):

 

  1. collection = db['practice'
  2. # 方法二 
  3. collection = db.practice 

四、插入数据

下面的操作进行前默认已经通过代码获取到了 practice 集合:

 

  1. import pymongo 
  2. client = pymongo.MongoClient(host='localhost', 27017) 
  3. db = client.data 
  4. collection = db.practice 

4.1 插入单条数据

数据形式是字典,可以通过 insert_one 完成单个数据的写入:

 

  1. data = { 
  2.     'name' : 'Chenxi'
  3.     'text' : 'Hello World'
  4.     'tags' : ['a''b''c'
  5. collection.insert_one(data) 

在MongoDB中,每条数据都有_id属性来唯一标识。可以输出返回的id确认数据情况:

 

  1. result = collection.insert_one(data) 
  2. print(result.inserted_id) 

4.2 插入多条数据

如果有多条数据,每条数据形式依然是字典,但需要组合成字典列表的形式后用 insert_many() 完成写入:

 

  1. data1 = { 
  2.     'name' : 'Chenxi'
  3.     'text' : 'Hello World'
  4.     'tags' : ['a''b''c'
  5. data2 = { 
  6.     'name' : 'Zaoqi'
  7.     'text' : 'Hello World'
  8.     'tags' : ['a''b''c'
  9. collection.insert_many([data1, data2]) 

五、删除数据

5.1 删除单条数据

删除一条数据。若删除条件相同匹配到多条数据,默认删除第一条。如上例中插入的两条数据均符合 {'text' : 'Hello World'} 那么通过 delete_one 会删除第一条数据,保留 {'name' : 'Zaoqi'} 这条数据:

 

  1. collection.delete_one({'text' : 'Hello World'}) 

5.2 删除多条数据

删除满足条件的所有数据。如上例中插入的两条数据均符合 {'text' : 'Hello World'} 那么通过 delete_many 会删除全部两条数据:

 

  1. collection.delete_many({'text' : 'Hello World'}) 

六、更新数据

6.1 更新单条数据

类似删除单条数据,只会更新满足条件的第一条数据。代码为 update_one(filter,update,upsert=False),其中第一个参数 filter为更新的条件,第二个参数 update 为更新的内容,第三个参数 upsert 默认 False, 若为 True 则当更新条件没找到时会插入更新的内容

 

  1. data3 = { 
  2.     'name''Xiaoming'
  3.     'text''Goodbye World'
  4.     'tags': [1, 2, 3] 
  5. update_condition = {'name' : 'Chenxi'}  
  6. collection.update_one(update_condition, {'$set' : data3}) 

6.2 更新多条数据

有了上面删除和插入多条数据的认识,就很好理解更新多条数据的逻辑了,同理也是更新符合条件的全部数据。

 

  1. data3 = { 
  2.     'name''Xiaoming'
  3.     'text''Goodbye World'
  4.     'tags': [1, 2, 3] 
  5. update_condition = {'text' : 'Hello World'}  
  6. collection.update_many(update_condition, {'$set' : data3}) 

七、查询数据

7.1 查询单条数据

匹配第一条满足的条件的结果,这条结果以字典形式返回,若没有查询到,则返回 None

 

  1. find_result = collection.find_one({'text' : 'Hello World'}) 
  2. print(find_result) 

可以通过 projection 参数来指定需要查询的字段:

 

  1. find_result = collection.find_one({'text' : 'Hello World'}, projection= {'_id':False'name':True'tags':False}) 
  2. print(find_result) 

7.2 查询多条数据

返回满足条件的所有结果,返回后需要通过迭代获取每个查询结果,每个结果类型为字典。和之前的增、删、改不类似,查询多条为 find()

 

  1. find_result = collection.find({'text' : 'Hello World'}) 
  2. for i in find_result: 
  3.     print(i) 

7.3 查询且删除

代码为 find_one_and_delete(filter,projection=None,sort=None,session=None,**kwargs),其中 sort为元祖列表类型,当查询匹配到多条数据时,根据某个条件排序,函数返回时返回第一条数据:

  1. find_condition = {'text' : 'Hello World'
  2. deleted_item = collection.find_one_and_delete(find_condition, sort= [('name', pymongo.DESCENDING)]) 
  3. print(deleted_item) 

查询也可以通过 $ 限定查询范围,常用内容如下:

 

 

img

 

八、计数

要统计查询结果有多少条数据,可以调用 count() 方法。具体操作如下:

 

 

  1. count = collection.find({'text' : 'Hello World'}).count() 
  2. print(count

九、排序

查询中已经看到 sort 可以作为参数发挥排序作用。实际上 sort 可以类似计数方法一样直接跟在查询的后面:

 

  1. results = collection.find({'text' : 'Hello World'}).sort('name', pymongo.ASCENDING) 
  2. print([result['name'for result in results]) 

十、索引

10.1 创建索引

在插入数据时,已经有一个 _id 索引了,但我们还可以自定义创建索引:

 

  1. collection.create_index('name'uniqueTrue

10.2 获取索引信息

可以利用 index_information 获取索引介绍:

 

  1. index_info = collection.index_information() 
  2. print(index_info) 

10.3 删除索引

 

  1. del_index = collection.drop_index(index_name) 

以上就是一些 Python 操作 MongoDB的基本用法,更多关于 PyMongo 的详细用法,可以自行查阅官方文档。

来源:早起Python内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯