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.0.tgz
# tar xf mongodb-linux-x86_64-rhel62-4.0.0.tgz
# mv mongodb-linux-x86_64-rhel62-4.0.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

转载于:https://www.cnblogs.com/zhangxinqi/p/9242687.html

python3之MongoDB相关推荐

  1. Python3操作MongoDB数据库

    Python3操作MongoDB数据库 文章目录 Python3操作MongoDB数据库 0. 写在前面 1. 安装开源驱动库pymongo 2. 参考 0. 写在前面 Linux:Ubuntu Ky ...

  2. python3连接mongoDB及鉴权问题处理

    目录 1.下载安装包,导入安装包,并尝试连接,方式一: 2.下载安装包,导入安装包,并尝试连接,方式二: 3.看似已经可以正常进行库内表的访问: 4.通过调整访问参数,问题得到解决: 1.下载安装包, ...

  3. python3数据库MongoDB的全面安装教程

    MongoDB 是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统其内容存储形式类似 JSON 对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活. MongoDB支 ...

  4. Python3 操作MongoDB数据库

    以上一篇的数据为例子. In [1]: import pymongo #引入pymongo模块In [2]: client = pymongo.MongoClient(host = 'localhos ...

  5. 非关系型数据库 之 文档型数据库 MongoDB 的使用(Python3)

    文章目录 1.MongoDB 简介 1.1.简述 1.2.应用场景 1.3.优点 1.4.缺点 2.CentOS 操作 MongoDB 2.1.安装启动 2.1.1.下载安装 2.1.2.后台启动 2 ...

  6. Mongodb 基本操作

    mongo简介 1.基于分布式文件存储的数据库.  为 WEB应用提供可扩展的高性能数据存储解决方案. 2.Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言, 几乎可 ...

  7. MongoDB 分片总结

    基础篇(能解决工作中80%的问题): MongoDB的概述.应用场景.下载方式.连接方式和发展历史等 MongoDB数据类型.重要概念以及shell常用指令 MongoDB文档的各种增加.更新.删除操 ...

  8. MongoDB 遇见 spark(进行整合)

    基础篇(能解决工作中80%的问题): MongoDB的概述.应用场景.下载方式.连接方式和发展历史等 MongoDB数据类型.重要概念以及shell常用指令 MongoDB文档的各种增加.更新.删除操 ...

  9. MongoDB命令汇总

    基础篇(能解决工作中80%的问题): MongoDB的概述.应用场景.下载方式.连接方式和发展历史等 MongoDB数据类型.重要概念以及shell常用指令 MongoDB文档的各种增加.更新.删除操 ...

最新文章

  1. 图论 ---- F. Graph Traveler 记忆化搜索 + 思维预处理(数论同余恒等式)
  2. 不伦不类的Action Script 3.0
  3. 堪比Focal Loss!解决目标检测中样本不平衡的无采样方法
  4. javascript 判断浏览器
  5. cocos2d中CCAnimation的使用(cocos2d 1.0以上版本)
  6. 【前端面试分享】- 寒冬求职下篇
  7. php微信支付na,虚拟支付
  8. GIS讲堂第二课-地图切片简介以及OL中的调用
  9. Linux下部署MyEclipse开发环境
  10. Flutter时间轴(timeline)
  11. python能做什么工作-会python语言能做什么工作
  12. Java 加密解密之对称加密算法PBE
  13. 你好,Wi-Fi 6
  14. 计算机的好与坏作文,电脑“坏”了的作文
  15. Python 之 解析xml
  16. java中到底该不该用@author标识作者?
  17. 【redis】8数据结构(5种基本+3种特殊)
  18. “数据产品”是怎样的存在?
  19. tomcat页面跳转问题
  20. JavaScript学习简单记录

热门文章

  1. SAP CRM responsibility的维护
  2. CRM和C4C product category hierarchy的可编辑性控制逻辑
  3. Cordova应用的JavaScript代码和自定义插件代码的调试
  4. Kibana功能一览
  5. 虚拟机VirtualBox中Ubuntu无法全屏(终极解决方法)
  6. rds 数据导入mysql_将数据导入到 Amazon RDS 数据库实例
  7. 计算机辅助教学应用论文,高校计算机辅助教学应用论文
  8. python中pandas安装视频教程_详解Python中pandas的安装操作说明(傻瓜版)
  9. eclipse配置本地连接 hadoop
  10. java红包雨_Java升职加薪课开发企业年会红包雨场景项目实战视频教程