MongoDB介绍:
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON (简称BSON)对象。字段值可以包含其他文档,数组及文档数组。
MongoDB特点:
1、MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
2、你可以在MongoDB记录中设置任何属性的索引来实现更快的排序。
3、MongoDB有很强的扩展性,海量数据处理时可以根据需要进行分片。
4、Mongo支持丰富的查询表达式。
5、Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
6、GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
7、MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
8、MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
9、MongoDB安装简单。
MongoDB数据类型:
Object ID:Documents 自生成的 _id
String:字符串,必须是utf-8
Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)
Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)
Double:浮点数 (没有float类型,所有小数都是Double)
Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)
Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典
Null:空数据类型 , 一个特殊的概念,None Null
Timestamp:时间戳
Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)
MongoDB安装
MongoDB安装非常简单,并且支持的系统非常丰富,支持OS X 32-bit,OS X 64-bit,Linux 32-bit,Linux 64-bit,Windows 32-bit,Windows 64-bit,Solaris i86pc,Solaris 64
等多个操作系统,支持语言也非常丰富C,C++,C# / .NET,Erlang,Haskell,Java,JavaScript,Lisp,node.JS,Perl,PHP,Python,Ruby,Scala
。
当前软件流程采用Docker安装,我们采用Docker安装方式进行安装,安装方式如下:
#安装MongoDB容器 #-e MONGO_INITDB_ROOT_USERNAME创建管理员账号 #-e MONGO_INITDB_ROOT_PASSWORD=123456创建密码 #映射容器服务的 27017 端口到宿主机的 27017 端口 docker run -d -p 27017:27017 --name mongodb -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123456 mongo
#进入容器 docker exec -it mongodb /bin/bash
#登录mongo,登录的数据库是admin数据库 mongo 192.168.100.130:27017 -u 'admin' -p '123456' --authenticationDatabase 'admin'
> show dbs;查看所有数据库
权限说明
read: 只能读取指定数据库 readWrite: 能读写指定数据库 dbAdmin: 能执行管理函数,如索引创建、删除,查看统计或访问 system.profile dbOwner: 对当前数据库有全部权限 userAdmin: 能创建、删除和管理用户 clusterAdmin: 只能在 admin 数据库中可用,能赋予用户所有分片和复制集相关函数的管理权限 readAnyDatabase: 只能在 admin 数据库中可用,能赋予用户所有数据库的读权限 readWriteAnyDatabase: 只能在 admin 数据库中可用,能赋予用户所有数据库的读写权限 userAdminAnyDatabase: 只能在 admin 数据库中可用,能赋予用户所有数据库的 userAdmin 权限 dbAdminAnyDatabase: 只能在 admin 数据库中可用,能赋予用户所有数据库的 dbAdmin 权限 root: 只能在 admin 数据库中可用。超级权限
MongoDB常用操作
>use shop创建并切换数据库
管理员身份创建用户,一个用户可以有多个角色,每个角色管理对应的数据库 管理员创建用户sh,分配数据库shop,该用户拥有的权限dbOwner #账号:sh #密码:123456 #角色:dbOwner 对当前数据库有全部权限 #管理数据库:shop >db.createUser({ user: 'sh', pwd: '123456', roles: [ { role: "dbOwner", db: "shop" } ] }); 登录数据库 >use shop切换到shop数据库 >db.auth("sh","123456") 返回1表示sh登录成功,前提是给sh用户分配了数据库shop 查看所有数据库 > show dbs; 创建文档集合(表) > db.createCollection("item") 没有权限,需要退出当前admin用户,重新登录mongodb,切换到shop数据库,再登录 连接本地mongo数据库,直接mongo指令即可,连接其它数据库,后面跟上ip即可 查看文档集合(查看有哪些表): > show tables; 添加文档(向表item中添加数据) db.文档集合名称.insert(数据); _id是固定的,id值最好自己写且唯一,默认生成的无规则 > db.item.insert({_id:"No1",name:"华为Mate 40 Pro",price:8500}) > db.item.insert({_id:"No2",name:"华为Mate 40",price:6500}) > db.item.insert({_id:"No3",name:"华为Mate 40 Pro +",price:12500}) 查询文档(查询指定数据表中所有数据) > db.item.find() 分页查询(),跳过前2条记录,查询后两条记录 > db.item.find().skip(2).limit(2) 模糊查询(正则匹配):db.item.find({列名:匹配规则}) > db.item.find({name:/Pro/}) > db.item.find({name:/^华为/}) 以华为开始的 精确查询 > db.item.find({_id:"No1"}) 复杂查询: db.item.find({name:/^华为/}) 以华为开始的 db.item.find({price:{$gt:7000}}) price>7000元,$gte则表示>= db.item.find({price:{$lt:7000}}) price<7000元,$lte则表示<= db.item.find({price:{$ne:8500}}) price!=8500 db.item.find({_id:{$in:["No1","No3"]}}) _id包含No1 No2的数据 db.item.find({_id:{$nin:["No1","No3"]}}) _id不包含No1 No2的数据 db.item.count() 总条数查询,count({条件}) > db.item.count({price:{$lt:9000}}) 价格小于9000的总数 修改文档(修改数据) 自增操作:db.item.update({_id:"No1"},{$inc:{price:1}})
指定列修改:db.item.update({_id:"No1"},{$set:{name:"华为P40 Pro"}})
删除文档(删除数据) > db.item.remove({_id:"No3"})