📜  Python数据持久性-PyMongo模块

📅  最后修改于: 2020-11-07 08:28:20             🧑  作者: Mango


MongoDB是面向文档的NoSQL数据库。它是在服务器端公共许可下分发的跨平台数据库。它使用JSON之类的文档作为架构。

为了提供存储海量数据的能力,将多个物理服务器(称为分片)互连,从而实现了水平可伸缩性。 MongoDB数据库由文档组成。

MongoDB

文档类似于关系数据库表中的一行。但是,它没有特定的架构。文档是键值对的集合-与字典相似。但是,每个文档中的kv对数量可能会有所不同。就像关系数据库中的表具有主键一样,MongoDB数据库中的文档也具有称为“ _id”的特殊键。

在看到MongoDB数据库如何与Python使用之前,让我们简要了解如何安装和启动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'] )

要查找特定文档而不是集合中的所有文档,我们需要将filter应用到find()方法。过滤器使用逻辑运算符。 MongoDB有自己的逻辑运算符集,如下所示:

Sr.No MongoDB operator & Traditional logical operator
1

$eq

equal to (==)

2

$gt

greater than (>)

3

$gte

greater than or equal to (>=)

4

$in

if equal to any value in array

5

$lt

less than (<)

6

$lte

less than or equal to (<=)

7

$ne

not equal to (!=)

8

$nin

if not equal to any value in array

例如,我们有兴趣获取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的文档的marks属性。

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