- Python数据持久化教程
 - Python 数据持久化 - 主页
 - Python 数据持久化 - 简介
 - Python 数据持久化 - 文件 API
 - 使用 os 模块进行文件处理
 - Python数据持久化——对象序列化
 - Python 数据持久化 - Pickle 模块
 - Python 数据持久化 - Marshal 模块
 - Python数据持久化——Shelve模块
 - Python数据持久化——dbm包
 - Python 数据持久化 - CSV 模块
 - Python 数据持久化 - JSON 模块
 - Python 数据持久性 - XML 解析器
 - Python 数据持久化 - Plistlib 模块
 - Python数据持久化-Sqlite3模块
 - Python 数据持久化 - SQLAlchemy
 - Python 数据持久化 - PyMongo 模块
 - Python 数据持久化 - Cassandra 驱动程序
 - 数据持久化-ZODB
 - 数据持久化 - Openpyxl 模块
 - Python 数据持久性资源
 - Python 数据持久化 - 快速指南
 - Python 数据持久性 - 有用资源
 - Python 数据持久化 - 讨论
 
Python 数据持久化 - PyMongo 模块
MongoDB 是一个面向文档的NoSQL数据库。它是一个在服务器端公共许可证下分发的跨平台数据库。它使用类似 JSON 的文档作为模式。
为了提供存储海量数据的能力,多个物理服务器(称为分片)互连,从而实现水平可扩展性。MongoDB 数据库由文档组成。
文档类似于关系数据库表中的一行。但是,它没有特定的架构。文档是键值对的集合——类似于字典。但是,每个文档中的 kv 对数量可能会有所不同。就像关系数据库中的表有一个主键一样,MongoDB 数据库中的文档有一个名为“_id”的特殊键。
在了解如何使用 Python 来使用 MongoDB 数据库之前,让我们先简单了解一下如何安装和启动 MongoDB。MongoDB 的社区版和商业版现已推出。社区版本可以从www.mongodb.com/download-center/community下载。
假设 MongoDB 安装在 c:\mongodb 中,可以使用以下命令调用服务器。
c:\mongodb\bin>mongod
默认情况下,MongoDB 服务器在端口号 22017 上处于活动状态。数据库默认存储在 data/bin 文件夹中,但可以通过 –dbpath 选项更改位置。
MongoDB 有自己的一组可在 MongoDB shell 中使用的命令。要调用 shell,请使用Mongo命令。
x:\mongodb\bin>mongo
类似于 MySQL 或 SQLite shell 提示符的 shell 提示符出现在该提示符之前,可以执行本机 NoSQL 命令。然而,我们对将 MongoDB 数据库连接到 Python 感兴趣。
PyMongo模块由 MongoDB Inc 自行开发,提供 Python 编程接口。使用众所周知的 pip 实用程序来安装 PyMongo。
pip3 install pymongo
假设 MongoDB 服务器已启动并正在运行(使用mongod命令)并且正在侦听端口 22017,我们首先需要声明一个MongoClient对象。它控制Python会话和数据库之间的所有事务。
from pymongo import MongoClient client=MongoClient()
使用此客户端对象与 MongoDB 服务器建立连接。
client = MongoClient('localhost', 27017)
使用以下命令创建一个新数据库。
db=client.newdb
MongoDB 数据库可以有很多集合,类似于关系数据库中的表。Collection 对象是通过Create_collection()函数创建的。
db.create_collection('students')
现在,我们可以在集合中添加一个或多个文档,如下所示 -
from pymongo import MongoClient
client=MongoClient()
db=client.newdb
db.create_collection("students")
student=db['students']
studentlist=[{'studentID':1,'Name':'Juhi','age':20, 'marks'=100},
{'studentID':2,'Name':'dilip','age':20, 'marks'=110},
{'studentID':3,'Name':'jeevan','age':24, 'marks'=145}]
student.insert_many(studentlist)
client.close()
要检索文档(类似于 SELECT 查询),我们应该使用find()方法。它返回一个游标,借助该游标可以获得所有文档。
students=db['students'] docs=students.find() for doc in docs: print (doc['Name'], doc['age'], doc['marks'] )
要查找特定文档而不是集合中的所有文档,我们需要将过滤器应用于 find() 方法。过滤器使用逻辑运算符。MongoDB 有自己的一组逻辑运算符,如下所示 -
| 先生编号 | MongoDB 运算符 & 传统逻辑运算符 | 
|---|---|
| 1 | 
 $当量 等于 (==)  | 
| 2 | 
 $gt 大于 (>)  | 
| 3 | 
 $gte 大于或等于 (>=)  | 
| 4 | 
 美元 如果等于数组中的任何值  | 
| 5 | 
 $lt 小于 (<)  | 
| 6 | 
 $LTE 小于或等于 (<=)  | 
| 7 | 
 $ne 不等于 (!=)  | 
| 8 | 
 $nin 如果不等于数组中的任何值  | 
例如,我们有兴趣获取 21 岁以上学生的名单。在find()方法的过滤器中使用 $gt 运算符,如下所示 -
students=db['students']
docs=students.find({'age':{'$gt':21}})
for doc in docs:
   print (doc.get('Name'), doc.get('age'), doc.get('marks'))
PyMongo 模块提供update_one()和update_many()方法,用于修改满足特定过滤器表达式的一个或多个文档。
让我们更新名称为 Juhi 的文档的标记属性。
from pymongo import MongoClient
client=MongoClient()
db=client.newdb
doc=db.students.find_one({'Name': 'Juhi'})
db['students'].update_one({'Name': 'Juhi'},{"$set":{'marks':150}})
client.close()