MongoDB 安装详细教程 + 常用命令 + 与 Python 的交互
MongoDB 简介
MongoDB (名称来自 humongous/巨大无比的, 是一个可扩展的高性能,开源,模式自由,面向文档的NoSQL,基于 分布式 文件存储,由 C++ 语言编写,设计之初旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB使用的是内存映射存储引擎,它会把磁盘IO操作转换成内存操作,如果是读操作,内存中的数据起到缓存的作用,如果是写操作,内存还可以把随机的写操作转换成顺序的写操作,大幅度提升性能。 MongoDB 既拥有Key-Value存储方式的高性能和高度伸缩性,也拥有传统的RDBMS系统的丰富的功能,集两者的优势于一身。 介于关系数据库和NoSQL之间,也是功能最丰富、最像关系数据库的的NoSQL。 MongoDB官方文档:https://docs.mongodb.com MongoDB中文社区:http://www.mongoing.com MongoDB特点
模式自由 :可以把不同结构的文档存储在同一个数据库里
面向集合的存储:适合存储 JSON风格文件的形式,
完整的索引支持:对任何属性可索引,
复制和高可用性:支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目的是提供冗余及自动故障转移。
自动分片:支持水平的数据库集群,可动态添加额外的机器。
丰富的查询:支持丰富的查询表达方式,查询指令使用JSON形式的标记,可轻易查询文档中的内嵌的对象及数组。
快速就地更新:查询优化器会分析查询表达式,并生成一个高效的查询计划。
高效的传统存储方式:支持二进制数据及大型对象(如图片等...)。
根据DB-Engines的排名统计,MongoDB综合排名第五(2017年10月数据,前四名分别是Oracle,MySQL,SQL Server,PostgreSQL),在NoSQL领域(非RDBMS)里排名第一。 适用场景
网站数据: 适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
缓存: 由于性能很高,也适合作为信息基础设施的缓存层。在系统重启之后,搭建的持久化缓存可以避免下层的数据源过载。
大尺寸、低价值的数据: 使用传统的关系数据库存储一些数据时可能会比较贵,在此之前,很多程序员往往会选择传统的文件进行存储。
高伸缩性的场景: 非常适合由数十或者数百台服务器组成的数据库。
用于对象及JSON数据的存储: MongoDB的BSON数据格式非常适合文档格式化的存储及查询。 不适用的场景
高度事物性的系统: 例如银行或会计系统。传统的关系型数据库目前还是更适用于需要大量原子性复杂事务的应用程序。
传统的商业智能应用: 针对特定问题的BI数据库会对产生高度优化的查询方式。对于此类应用,数据仓库可能是更合适的选择。
需要使用SQL语句解决的场景: MongoDB不支持SQL语句。 商业应用
京东:使用MongoDB存储商品信息,支持比价和关注功能.
百度云:使用MongoDB管理百度云盘中500亿条关于文件源信息的记录.
CERN:著名的粒子物理研究所,欧洲核子研究中心大型强子对撞机的数据使用MongoDB存储。
The New York Times:世界领先的在线新闻门户网站之一,使用MongoDB作为内容存储。
sourceforge.net,资源网站查找,创建和发布开源软件免费,使用MongoDB做后端存储。 一.MongoDB的安装 下载mongodb的版本,两点注意 根据业界规则,偶数为稳定版,如3.2.X;奇数为开发版,如3.3.X
32bit的mongodb最大只能存放2G的数据,64bit就没有限制
MongoDB官网安装包下载地址:http://www.mongodb.org/downloads MongoDB安装文档:https://docs.mongodb.com/getting-started/shell/installation/ Ubuntu下安装MongoDB:
sudo apt-get install mongodb
使用MongoDB,需要先启动服务端,再使用客户端连接数据库。 1. 服务端
MongoDB 默认的存储数据目录为 /data/db,默认端口27017
服务的命令为mongod,可以通过help查看所有参数
python@ubuntu:~$ mongod --help 相关文件存放路径:默认各个文件存放路径如下所示:
可执行文件存放路径:/usr/bin/mongod 和 /usr/bin/mongo
默认数据库文件存放路径:/var/lib/mongodb
默认日志文件存放路径:/var/log/mongodb/mongodb.log
配置文件默认存放路径:/etc/mongodb.conf
可以通过修改配置文件修改数据文件和日志文件的存放路径
mongod 是与服务器端相关的执行文件
mongo 是与客户端相关的执行文件 a.启动MongoDB服务:
cd /usr/bin
./mongod --dbpath=/var/lib/mongodb --logpath=/var/log/mongodb/mongodb.log --auth --logappend --port=27017 --fork
dbpath 存储位置, logpath 日志路径,logappend追加形式,port端口号,fork启动.
b.停止mongdb
pkill mongod MongoDB中提供了一种后台程序方式启动的选择,只需要加上-fork参数即可但是注意:用到如果了--fork参数,必须就启用--logpath参数来指定日志文件,这是强制的。
如果使用--fork在后台运行mongdb服务,那么就要通过本机管理数据库向服务器发送shutdownServer()消息来关闭。 2. 在客户端 进行用户创建
启用用户认证方式启动
1.如果之前未定义过用户,所以mongod的将允许本地直接访问操作数据库将使用本地根权限,
2.如果使用--auth参数启动,将启用的MongoDB授权认证,即启用不同的用户对不同的数据库的操作权限。 也可以在配置文件mongod.conf中加入auth = true按第二种启动方式启动。 cd /usr/bin
./mongo a. 切换admin数据库下
show databases
use admin
b. 创建一个拥有root权限的超级用户,拥有所有数据库的所有权限
db.createUser({user : "lowman", pwd : "lowman9527", roles : ["root"]}) c. 如果 MongoDB 开启了权限模式,并且某一个数据库没有任何用户时,可以不用认证权限并创建一个用户,但是当继续创建第二个用户, 会返回错误,若想继续创建用户则必须认证登录。 认证登录到lowman用户(第一次创建的用户)
db.auth("lowman","lowman9527") 查看当前认证登录的用户信息
show users 认证登录成功,可以继续创建第二个用户
db.createUser({user : "lowman2", pwd : "", roles : [{role : "read", db : "test_database"}, {role : "readWrite", db : "test_databases"}]}) 查看当前数据库下所有的用户信息
db.system.users.find() d. 删除用户
db.dropUser("用户名") 3. 要获得关于MongoDB中的服务器统计,需要在MongoDB的客户端键入命令db.stats()。这将显示数据库名称,收集和数据库中的文档信息。输出的命令如下所示 "db" : "test" ,表示当前是针对"test"这个数据库的描述。想要查看其他数据库,可以先运行$ use datbasename
"collections" : 3,表示当前数据库有多少个collections.可以通过运行show collections查看当前数据库具体有哪些collection.
"objects" : 267,表示当前数据库所有collection总共有多少行数据。显示的数据是一个估计值,并不是非常精确。
"avgObjSize" : 623.2322097378277,表示每行数据是大小,也是估计值,单位是bytes
"dataSize" : 16640,表示当前数据库所有数据的总大小,不是指占有磁盘大小。单位是bytes
"storageSize" : 110592,表示当前数据库占有磁盘大小,单位是bytes,因为mongodb有预分配空间机制,为了防止当有大量数据插入时对磁盘的压力,因此会事先多分配磁盘空间。
"numExtents" : 0,没有什么真实意义
"indexes" : 2 ,表示system.indexes表数据行数。
"indexSize" : 53248,表示索引占有磁盘大小。单位是bytes
"ok" : 1,表示服务器正常 二.MongoDB快速入门
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。 1. 数据库
数据库是一个集合的物理容器。一个单一的MongoDB服务器通常有多个数据库。如自带的admin、test,或自行创建的数据库。 2. 集合
也称为文档组,类似于关系数据库中的表格。
集合存在于数据库中,一个数据库可以包含很多个集合。集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。
当第一个文档数据插入时,集合就会被创建。 3. 文档
MongoDB使用了BSON(Binary JSON)这种结构来存储数据,并把这种格式转化成了文档这个概念,每个文档是一组 键 : 值 的数据。 4. 数据库基本命令
连接成功后,默认使用test数据库 查看当前数据库名称
db 查看所有数据库名称,列出所有在物理上存在的数据库
show dbs 切换数据库,如果数据库不存在也并不创建,直到插入数据或创建集合时数据库才被创建
use 数据库名称 删除当前指向的数据库,如果数据库不存在,则什么也不做
db.dropDatabase() 5. 集合命令 创建集合语法如下
name是要创建的集合的名称
options是一个文档,用于指定集合的配置,选项参数是可选的,所以只需要到指定的集合名称
可以不手动创建集合,向不存在的集合中第一次加入数据时,集合会被创建出来 db.createCollection(name, options) #例1:不限制集合大小
db.createCollection("stu") #例2:限制集合大小
- 参数capped:默认值为false表示不设置上限,值为true表示设置上限
- 参数size:当capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节
示例:
db.createCollection("stu", {capped : true, size : 6142800} ) 查看当前数据库的集合
show collections 删除集合命令
db.集合名称.drop() 6.数据类型
下面为MongoDB中常用的几种数据类型:
ObjectID:文档ID
String:字符串,最常用,必须是有效的UTF-8
Boolean:存储一个布尔值,true或false
Integer:整数可以是32位或64位,这取决于服务器
Double:存储浮点值
Arrays:数组或列表,多个值存储到一个键
Object:用于嵌入式的文档,即一个值为一个文档
Null:存储Null值
Timestamp:时间戳,表示从1970-1-1到现在的总秒数
Date:存储当前日期或时间的UNIX时间格式
创建日期语句如下,注意参数的格式为YYYY-MM-DD
Date('2017-12-20') ObjectID
_id是一个12字节的十六进制数,保证每一份文件的唯一性。你可以自己去设置_id插入文档。如果没有提供,那么MongoDB的每个文档提供了一个独特的ID,这12个字节: 前4个字节为当前时间戳; 之后的3个字节的机器ID; 接下来的2个字节的MongoDB的服务进程id; 剩余3个字节是简单的增量值 一个字节等于2位十六进制(一位十六进制的数等于四位二进制的数。一个字节等于8位二进制数) 三. 与python交互 0.设置mongodb允许远程连接 vim /etc/mongodb.conf 把 bind_ip=127.0.0.1 修改成 bind_ip=0.0.0.0,允许所有ip连接(生产环境不建议), 或者指定ip 关闭服务器对27017端口的防火墙,或者直接关闭系统防火墙(生产环境不建议) 1.sudo pip install pymongo 2. 官方文档: http://api.mongodb.com/python/current/tutorial.html 3. 引入包pymongo: import pymongo 4. 创建 MongoClient 对象
client = pymongo.MongoClient('主机ip',端口) 5. 获取 Database 对象
通过client对象获取获得数据库对象
db = client.数据库名称 6. 获取 Collections 对象
通过db对象获取集合对象
collections = db.集合名称 主要方法如下:
增
insert_one:加入一条文档对象
insert_many:加入多条文档对象 删
delete_one:删除一条文档对象
delete_many:删除多条文档对象 改
update_one:更新一条文档对象
update_many:更新多条文档对象 查
find_one:查找一条文档对象
find:查找多条文档对象 7. 使用示例
import pymongo
from bson.objectid import ObjectId # 创建连接数据库实例
client = pymongo.MongoClient("具体的ip", 27017) # 获取数据库对象, 如果是登录admin数据库进行用户认证,需要再获取到相应的数据库对象再进行crud操作 client.test
db = client.test
# 用户认证, 用户名称和密码需要拥有该数据库相应的权限
db.authenticate("lowman2", "")
# 获取集合对象
collection = db.stu # database = client.admin
# database.authenticate("lowman", "lowman9527")
# collection = client.test.stu # 定义文档
doc_1 = {
"name1": "lowman",
"age1": 18
} doc_2 = {
"name2": "渣男",
"age2": 98
} doc = [doc_1, doc_2] """
增加数据
"""
# 插入一条数据
# _id = collection.insert_one(doc_1).inserted_id
# print(_id) # 一次性插入多条数据, 按插入的顺序返回_id
# callback_data = collection.insert_many(doc)
# for id in callback_data.inserted_ids:
# print(id) """
删除数据
"""
# 删除一条文档数据
# collection.delete_one({'age1': 18}) # 一次性删除多条文档数据
# collection.delete_many({'name1': 'lowman'}) """
修改数据
"""
# 修改一条数据,首先查询到 gender 为False 的文档, 然后将其name设置为 hehe
# collection.update_one({'_id': "fa8sd68h54dsafg6qw87er"}, {'$set': {'name': 'hehe'}})
# 一次性修改多条数据
# collection.update_many({'gender':True},{'$set':{'name':'haha'}}) """
查询数据
"""
# 查询一条数据, 根据id查询时,需要使用ObjectId()将字符串id装换为ObjectId
# data = collection.find_one({'_id': ObjectId("5bf7fae1f86fe6048cc54be6")})
# print(data)
# 查询多条数据
# cursor = collection.find({'name1': 'lowman'})
# for item in cursor:
# print(item["age1"])
MongoDB 安装详细教程 + 常用命令 + 与 Python 的交互的更多相关文章
- Python环境搭建—安利Python小白的Python安装详细教程
		
人生苦短,我用Python.众所周知,Python目前越来越火,学习Python的小伙伴也越来越多.最近看到群里的小伙伴经常碰到不会安装Python或者不知道去哪下载Python安装包等系列问题,为了 ...
 - Python、 Pycharm、Django安装详细教程(图文)
		
前言 这篇文章主要介绍了Python. Pycharm.Django安装详细教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧. ...
 - Python环境搭建—安利Python小白的Python和Pycharm安装详细教程
		
人生苦短,我用Python.众所周知,Python目前越来越火,学习Python的小伙伴也越来越多.最近看到群里的小伙伴经常碰到不会安装Python或者不知道去哪下载Python安装包等系列问题,为了 ...
 - 面系那个对象开发原则.高内聚.低耦合+Python安装详细教程+print输出带颜色的方法
		
面系那个对象开发原则.高内聚.低耦合 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准.划分摸块的一个准则就是高内聚低耦合. 这是软件工程中的概念,是判断设计好坏的标准,主要是面向OO的设计, ...
 - Linux系统Vi/Vim编辑器的简单介绍、安装/卸载、常用命令
		
Linux系统Vi/Vim编辑器的简单介绍.安装/卸载.常用命令 1.介绍 vi(Visual Interface)编辑器是Linux和Unix上最基本的文本编辑器,工作在字符模式下.由于不需要图形界 ...
 - 今天带来Pycharm安装详细教程
		
Python环境搭建—安利Python小白的Python和Pycharm安装详细教程 人生苦短,我用Python.众所周知,Python目前越来越火,学习Python的小伙伴也越来越多.最近看到群里的 ...
 - MySQL5.7.25解压版安装详细教程
		
MySQL5.7.25解压版安装详细教程 安装步骤: 1.首先,你要下载MySQL解压版,下载地址:https://www.mysql.com/downloads/,图解: 2.解压安装包,根据自己的 ...
 - (转载)Centos下Elasticsearch安装详细教程
		
原文地址:http://www.cnblogs.com/sunny1009/articles/7874251.html Centos下Elasticsearch安装详细教程 1.Elasticsear ...
 - Centos下Elasticsearch安装详细教程
		
Centos下Elasticsearch安装详细教程 1.Elasticsearch简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 ...
 
随机推荐
- 安全运维 -- Linux服务器使用公私钥密匙证书登录
			
环境:Ubuntu 16 前言 黑客遍地都是,ssh/pop3/ftp等爆破工具的流行让站长的日常运维工作量大大加重.Metasplot,Bruter等工具更是针对以上协议有专门 的破解方法,有字典破 ...
 - count(distinct) 与group by 浅析
			
x在传统关系型数据库中,group by与count(distinct)都是很常见的操作.count(distinct colA)就是将colA中所有出现过的不同值取出来,相信只要接触过数据库的同学都 ...
 - DB2锁机制
			
相比较Oracle来说,DB2的锁机制麻烦了很多,而且这个麻烦带来的不是性能的上升而是下降,不过如果细致了解的话,只能感慨不愧是数据库理论诞生的公司,在实现数据库理论上比Oracle全面得多. ...
 - OSGi 系列(十四)之 Event Admin Service
			
OSGi 系列(十四)之 Event Admin Service OSGi 的 Event Admin 服务规范提供了开发者基于发布/订阅模型,通过事件机制实现 Bundle 间协作的标准通讯方式. ...
 - struts2用到的jar有那些
			
struts2.0 lib/antlr-2.7.6.jarlib/struts2-core-2.0.14.jarlib/struts2-spring-plugin-2.0.14.jarlib/free ...
 - java--多线程编程简介
			
1.什么时候使用多线程编程 一个任务在正常情况下是按顺序执行的,但是如果当前任务里有多个相似进程块(例如for,while语句),我们就可以考虑把这些代码块抽出来并行运行,无需阻塞 2.实现多线程的几 ...
 - Devexpress VCL Build v2013 vol 14.1.5 发布
			
What's New in 14.1.5 (VCL Product Line) New Major Features in 14.1 What's New in VCL Products 14.1 ...
 - 2018.09.06 烽火传递(单调队列优化dp)
			
描述 烽火台是重要的军事防御设施,一般建在交通要道或险要处.一旦有军情发生,则白天用浓烟,晚上有火光传递军情. 在某两个城市之间有 n 座烽火台,每个烽火台发出信号都有一定的代价.为了使情报准确传递, ...
 - 2018.08.17 洛谷P3110 [USACO14DEC]驮运(最短路)
			
传送门 一道sb最短路,从两个起点和终点跑一边最短路之后直接枚举两人的汇合点求最小值就行了. 代码: #include<bits/stdc++.h> #define N 40005 #de ...
 - 03-vue-router
			
前端路由的实现原理 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...