服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|数据库技术|

服务器之家 - 数据库 - MongoDB - Python 操作 MongoDB 基础讲解

Python 操作 MongoDB 基础讲解

2023-05-07 04:13未知服务器之家 MongoDB

MongoDB是一种面向文档型的非关系型数据库(NoSQL),非关系数据库中是以键值对存储,结构不固定,易存储,减少时间和空间的开销。 [[385197]] 文档型数据库通常是以JSON或XML格式存储数据,而Mongodb使用的数据结构是BSON,即二进制J

 MongoDB是一种面向文档型的非关系型数据库(NoSQL),非关系数据库中是以键值对存储,结构不固定,易存储,减少时间和空间的开销。

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

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

 

Python 操作 MongoDB 基础讲解

 

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 的详细用法,可以自行查阅官方文档。

延伸 · 阅读

精彩推荐
  • MongoDBMongodb实现定时备份与恢复的方法教程

    Mongodb实现定时备份与恢复的方法教程

    这篇文章主要给大家介绍了Mongodb实现定时备份与恢复的方法教程,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面...

    chenjsh364522020-05-13
  • MongoDBMongoDB 内存使用情况分析

    MongoDB 内存使用情况分析

    都说 MongoDB 是个内存大户,但是怎么知道它到底用了多少内存呢...

    MongoDB教程网10002020-09-29
  • MongoDB迁移sqlserver数据到MongoDb的方法

    迁移sqlserver数据到MongoDb的方法

    这篇文章主要介绍了迁移sqlserver数据到MongoDb的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    听枫xl9682021-01-03
  • MongoDBMongoDB中javascript脚本编程简介和入门实例

    MongoDB中javascript脚本编程简介和入门实例

    作为一个数据库,MongoDB有一个很大的优势——它使用js管理数据库,所以也能够使用js脚本进行复杂的管理——这种方法非常灵活 ...

    MongoDB教程网6982020-04-24
  • MongoDBMongoDB凭什么跻身数据库排行前五

    MongoDB凭什么跻身数据库排行前五

    MongoDB以比去年同期超出65.96分的成绩继续雄踞榜单前五,这个增幅在全榜仅次于PostgreSQL的77.99,而其相对于4月份的6.10分的增长也是仅次于微软SQL Server排名...

    孙浩峰3892020-05-22
  • MongoDBMongoDB安装图文教程

    MongoDB安装图文教程

    这篇文章主要为大家详细介绍了MongoDB安装图文教程,分为两大部分为大家介绍下载MongoDB和安装MongoDB的方法,感兴趣的小伙伴们可以参考一下 ...

    Yangyi.He6132020-05-07
  • MongoDB分布式文档存储数据库之MongoDB分片集群的问题

    分布式文档存储数据库之MongoDB分片集群的问题

    这篇文章主要介绍了分布式文档存储数据库之MongoDB分片集群的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...

    Linux-18743072020-12-20
  • MongoDBmongodb基本命令实例小结

    mongodb基本命令实例小结

    这篇文章主要介绍了mongodb基本命令,结合实例形式总结分析了MongoDB数据库切换、查看、删除、查询等基本命令用法与操作注意事项,需要的朋友可以参考下...

    dawn-liu3652020-05-26