📅  最后修改于: 2020-11-07 08:28:20             🧑  作者: Mango
MongoDB是面向文档的NoSQL数据库。它是在服务器端公共许可下分发的跨平台数据库。它使用JSON之类的文档作为架构。
为了提供存储海量数据的能力,将多个物理服务器(称为分片)互连,从而实现了水平可伸缩性。 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()