python3之MongoDB
1、MongoDB简介
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
主要特点:
- MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
- 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
- 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
- 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
- Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
- MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
- Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
- Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
- Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
- GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
- MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
- MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
MongoDB工具:
使用于MongoDB管理的工具包括监控工具和GUI
监控:
MongoDB提供了网络和系统监控工具Munin,它作为一个插件应用于MongoDB中。
Gangila是MongoDB高性能的系统监视的工具,它作为一个插件应用于MongoDB中。
基于图形界面的开源工具 Cacti, 用于查看CPU负载, 网络带宽利用率,它也提供了一个应用于监控 MongoDB 的插件。
GUI:
- Fang of Mongo – 网页式,由Django和jQuery所构成。
- Futon4Mongo – 一个CouchDB Futon web的mongodb山寨版。
- Mongo3 – Ruby写成。
- MongoHub – 适用于OSX的应用程序。
- Opricot – 一个基于浏览器的MongoDB控制台, 由PHP撰写而成。
- Database Master — Windows的mongodb管理工具
- RockMongo — 最好的PHP语言的MongoDB管理工具,轻量级, 支持多国语言.
2、MongoDB安装
(1)windows平台安装MongoDB
下载地址:https://www.mongodb.com/download-center#community
直接下载安装文件,然后选择安装路径安装即可,安装完成后通过系统服务启动mongdb
(2)linux平台安装MongoDB
# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-4.0..tgz
# tar xf mongodb-linux-x86_64-rhel62-4.0..tgz
# mv mongodb-linux-x86_64-rhel62-4.0. /usr/local/mongod #echo "export PATH=$PATH:/usr/local/mongodb/bin" >> /etc/profile
# . /etc/profile
#创建数据目录
# mkdir -p /data/db
#启动服务
# mongod
更多安装详细:https://docs.mongodb.com/manual/installation/
3、mongoDB基本操作
(1)创建操作
创建或插入操作将新的文档添加到集合中,如果集合不存在则插入操作将创建该集合
db.collection.insertOne() 插入单个文档
db.collection.insertMany() 插入多个文档
db.collection.insert() 将单个或多个文档插入到集合中
> db.dba.insertOne({item:"card",qty:15})
{
"acknowledged" : true,
"insertedId" : ObjectId("5b35cabe638a2654f3efaa8f")
}
>
#指定_id插入文档
> db.dba.insertOne({_id:1,item:"python",qty:100})
{ "acknowledged" : true, "insertedId" : 1 }
#插入多个文档
> db.dba.insertMany([{_id:2,item:"java",qty:88},{_id:3,item:'javascript',qty:77},{_id:4,item:'django',qty:66}])
{ "acknowledged" : true, "insertedIds" : [ 2, 3, 4 ] }
(2)查询操作
读取操作从集合中检索文档
db.collection.find()
> db.dba.find() #查询集合所有
> db.dba.find({_id:1}) #查询_id为1的文档
> db.dba.find({_id:{$gt:2} }) #查询_id大于2的文档
(3)更新操作
db.collection.updateOne() 更新单个文档
db.collection.updateMany() 更新多个文档
db.collection.replaceOne() 替换文档
db.dba.updateOne({item:"python"},{$set:{qty:111}}) #修改item为python的qty为111
#将data字段更新为当前日期,如果不存在则创建该字段
db.dba.updateOne({item:"python"},{$currentDate:{data:true}})
#将_id大于2的文档修改qty的值并设置date字段为当前时间
db.dba.updateMany({_id:{$gt:2}},{$set:{qty:"hello"},$currentDate:{date:true}})
#将_id为1的字段替换掉
db.dba.replaceOne({_id:1},{_id:1,item:"abc",qty:333,data:2018})
(4)删除操作
db.collection.deleteOne() #删除一条文档
db.collection.deleteMany() #删除多条文档
#删除指定条件的一条文档
db.dba.deleteOne({_id:1})
#删除集合所有文档
db.dba.deleteMany({}) #删除_id大于3的文档
db.dba.deleteMany({_id:{$gt:3}})
4、python使用MongoDB
(1)安装MongoDB驱动程序
pip install pymongo
(2)链接MongoDB
client=pymongo.MongoClient(host='localhost',port=27017)
#或者
client=pymongo.MongoClient('mongodb://localhost:27017/')
(3)指定数据库
db=client.dba
#或者
db=client['dba']
(4)指定集合
collection=db.dba
#或者
collection=db['dba']
(5)插入数据
#插入数据单条数据
student={
'_id':1,
'name':'python',
'age':200,
}
#result=collection.insert(student)
#print(result) #返回一个InsertOneResult实例
#插入多条数据
suudentany=[
{'_id':2,'name':'java','age':300},
{'_id':3,'name':'javascript','age':400},
{'_id':4,'name':'c++','age':500}
]
#result=collection.insert_many(suudentany)
#print(result)
#print(result.inserted_ids) #显示插入数据id列表
(6)查询数据
result=collection.find_one({'name':'python'}) #查询单条数据
print(type(result)) #返回字典类型
print(result)
#查询多条数据,需要迭代读取
resultall=collection.find()
for i in resultall:
print(i)
过滤查询匹配的文档
resultfiter=collection.find({'age':{'$gt':300}}) #查询age大于300的文档
for i in resultfiter:
print(i)
#
{'_id': 3, 'name': 'javascript', 'age': 400}
{'_id': 4, 'name': 'c++', 'age': 500}
比较符号还有:$lt小于、$gt大于、$lte小于等于、$gte大于等于、$ne不等于、$in在范围内、$nin不在范围内
另外还可以用正则匹配$regex
result=collection.find({'name':{'$regex':'^p.*'}}) #匹配以P开头的name
其他功能符号:$exists属性是否存在、$type类型判断、$mod数字余数、$text文本查询、$shere条件查询
更多详细用法可以在MongoDB官网找到:https://docs.mongodb.com/manual/reference/operator/query/
(7)计数
要统计查询结果有多少条数据,可以调用count()方法
count=collection.find().count()
#或者统计符合条件的数据
count=collection.find({'age':20}).count()
(8)排序
排序时,直接调用sort()方法,并在其中传入排序的字段及升降序标志即可
pymongo.ASCENDING为升序,pymongo.DESCENDING为降序
results=collection.find().sort('name',pymongo.ASCENDING)
(9)偏移
如只想去某几个元素,可以利用skip()方法偏移位置来忽略前面的元素
results=collection.find().sort('name',pymongo.ASCENDING).skip(2) #只取第三个及后面的元素
另外还可以使用limit()方法指定要取的结果个数
results=collection.find().sort('name',pymongo.ASCENDING).skip(2).limit(2) #只取两个结果
(10)更新
可以使用update()方法来更新数据,但此方法不够安全可以使用$set它只 更新存在文档内存在的字段
result=collection.update({'name':'python'},{'date':8})
#上面方法不安全,它会将除了_id和要更新的数据外的其他字段会被删除
#使用$set会比较安全
result=collection.update({'name':'python'},{'$set':{'date':12}})
官方推荐使用update_one()和update_many()方法,来严格控制影响的字段,它需要使用$类型的操作字符来作为字典的键名
result=collection.update_one({'_id':3},{'$set':{'name':'javascript'}})
print(result)
print(result.matched_count,result.modified_count) #打印匹配的数据条数和影响的数据条数
#updata_many()会将所有符合条件的数据都更新
result=collection.update_many({'date':{'$gt':2}},{'$inc':{'data':10}}) #将所有date值大于2的文档加上10
(11)删除
删除可以使用的方法有remove()符合条件的数据都会被删除,delete_one()值删除符合条件的第一条和delete_many()删除所有符合条件的
result=collection.delete_one({'name':'java'})
result1=collection.delete_many({'data':{'$gt':20}})
(12)其他操作
pyMongo还提供了一些组合方法:
find_one_and_delete() 查找后删除
find_one_and_replace() 查找后替换
find_one_and_update() 查找后更新
create_index() 在集合上创建索引
create_indexes() 在集合上创建一个或多个索引
drop_index() 删除此集合上的索引
更多集合操作方法:http://api.mongodb.com/python/current/api/pymongo/collection.html
pymongo的API文档:http://api.mongodb.com/python/current/api/pymongo/index.html
python3之MongoDB的更多相关文章
- python3连接Mongodb
前提条件,安装过Mongondb,并且装一下Robomongo(为了更加直观地看到测试时数据的变化 ) 1.安装PyMySQL pip install pymongo 2.测试 import pymo ...
- 爬虫基础(四)-----MongoDB的使用
------------------------------------------------------------------------摆脱穷人思维 <四> :减少无意义的频繁决策 ...
- 爬虫系列之mongodb
mongo简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非 ...
- 4、爬虫系列之mongodb
mongodb mongo简介 简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB是一个介于关系数据库和非关系数 ...
- 4、爬虫之mongodb
mongodb 简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品 ...
- Python3中PyMongo的用法
MongoDB存储 在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库. 连接Mon ...
- Python3中使用PyMongo的方法详解
前言 本文主要给大家介绍的是关于在Python3使用PyMongo的方法,分享出来供大家参考学习,下面话不多说了,来一起看看详细介绍: MongoDB存储 在这里我们来看一下Python3下Mongo ...
- flask中配置并使用mongodb
在你安装并运行了mongodb的情况下: 随便在一个文件中写入以下代码: import pymongo client = pymongo.MongoClient(host="localhos ...
- python之pymongo
引入 在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库. MongoDB 数据库安 ...
随机推荐
- Kafka+Log4j2日志
默认你已经安装配置了Zookeeper和Kafka. 为了目录清晰,我的Kafka配置文件的Zookeeper部分是:加上了节点用来存放Kafka信息 启动Zookeeper,然后启动Kafka. Z ...
- js,mui,jq 操作基本的DOM
一.HTML <ul> <li>1111111</li> <li>22222222</li> </ul> 二.CSS li{ h ...
- 基于 Dojo toolkit 实现 web2.0 的 MVC 模式
前言 MVC 模式是设计模式中的经典模式,它可以有效的分离数据层,展示层,和业务逻辑层.Web2.0 技术由于其良好的用户体验被广泛应用于 WEB 应用的展示层.但是在传统的 web 开发中,展示层的 ...
- P2885 [USACO07NOV]电话线Telephone Wire
P2885 [USACO07NOV]电话线Telephone Wire 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话 ...
- SVN的Windows和Linux客户端操作详解
SVN的Windows和Linux客户端操作详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Windows客户端操作 1.安装SVN客户端 a>.去官网下载svn软件 ...
- 使用htpasswd实现Nginx验证访问
Nginx是一个高性能的WEB服务器,越来越多的用户使用,如果您的某个站点不希望对外公开(比如PHPMyAdmin),可以使用htpasswd实现Nginx验证访问. 安装htpasswd htpas ...
- Linux下Shell去除空行的方法
1.用grep命令 grep -v “^$” 文件名 2.用sed命令 cat 文件名 | sed ‘/^$/d' 3.用awk命令 cat 文件名 | awk ‘{if($0!=”")pr ...
- Python新手入门英文词汇笔记(转)
一.交互式环境与print输出 1.print:打印/输出2.coding:编码3.syntax:语法4.error:错误5.invalid:无效6.identifier:名称/标识符7.charac ...
- Linux记录-CentOS配置Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...
- JAVA记录-Mybatis介绍
1.什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyB ...