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

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

延伸 · 阅读

精彩推荐
  • MongoDBWindows下MongoDB配置用户权限实例

    Windows下MongoDB配置用户权限实例

    这篇文章主要介绍了Windows下MongoDB配置用户权限实例,本文实现需要输入用户名、密码才可以访问MongoDB数据库,需要的朋友可以参考下 ...

    MongoDB教程网3082020-04-29
  • MongoDBMongoDB系列教程(五):mongo语法和mysql语法对比学习

    MongoDB系列教程(五):mongo语法和mysql语法对比学习

    这篇文章主要介绍了MongoDB系列教程(五):mongo语法和mysql语法对比学习,本文对熟悉Mysql数据库的同学来说帮助很大,用对比的方式可以快速学习到MongoDB的命...

    MongoDB教程网3252020-05-01
  • MongoDBMongoDB多条件模糊查询示例代码

    MongoDB多条件模糊查询示例代码

    这篇文章主要给大家介绍了关于MongoDB多条件模糊查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MongoDB具有一定的参考学习价值...

    浅夏晴空5902020-05-25
  • MongoDBmongodb数据库基础知识之连表查询

    mongodb数据库基础知识之连表查询

    这篇文章主要给大家介绍了关于mongodb数据库基础知识之连表查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mongodb具有一定的参...

    ZJW02155642020-05-22
  • MongoDBMongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    MongoDB查询之高级操作详解(多条件查询、正则匹配查询等)

    这篇文章主要给大家介绍了关于MongoDB查询之高级操作(多条件查询、正则匹配查询等)的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者...

    w田翔3872020-12-19
  • MongoDB在mac系统下安装与配置mongoDB数据库

    在mac系统下安装与配置mongoDB数据库

    这篇文章主要介绍了在mac系统下安装与配置mongoDB数据库的操作步骤,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    CXYhh1219312021-11-14
  • MongoDBMongoDB的索引

    MongoDB的索引

    数据库中的索引就是用来提高查询操作的性能,但是会影响插入、更新和删除的效率,因为数据库不仅要执行这些操作,还要负责索引的更新 ...

    MongoDB教程网2532020-05-12
  • MongoDBMongodb索引的优化

    Mongodb索引的优化

    MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。接下来通过本文给大家介绍Mongodb索引的优化,本文介绍的非常详细,具有参考借鉴价值,感...

    MRR3252020-05-05