持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情
1、MongoDB
1)MongoDB安装
2)MongoDB常用操作
1 MongoDB
1.1 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类型,时间戳可以秒杀一切时间类型)
1.2 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'
#创建数据库shop
use shop
#创建用户
#账号:root
#密码:123456
#角色:root
#管理数据库:admin
db.createUser({ user: 'sh', pwd: '123456', roles: [ { role: "dbOwner", db: "shop" } ] });
效果如下:
权限说明:
read: 只能读取指定数据库
readWrite: 能读写指定数据库
dbAdmin: 能执行管理函数,如索引创建、删除,查看统计或访问 system.profile
dbOwner: 对当前数据库有全部权限
userAdmin: 能创建、删除和管理用户
clusterAdmin: 只能在 admin 数据库中可用,能赋予用户所有分片和复制集相关函数的管理权限
readAnyDatabase: 只能在 admin 数据库中可用,能赋予用户所有数据库的读权限
readWriteAnyDatabase: 只能在 admin 数据库中可用,能赋予用户所有数据库的读写权限
userAdminAnyDatabase: 只能在 admin 数据库中可用,能赋予用户所有数据库的 userAdmin 权限
dbAdminAnyDatabase: 只能在 admin 数据库中可用,能赋予用户所有数据库的 dbAdmin 权限
root: 只能在 admin 数据库中可用。超级权限
1.3 MongoDB常用操作
1)创建数据库
use 集合空间名字(数据库名字)
例如:use shop
> use shop
switched to db shop
>
查看所有数据库:show dbs
> show dbs;
admin 0.000GB
config 0.000GB
local 0.000GB
shop 0.000GB
>
2)创建文档集合(表)
db.createCollection("集合名字")
例如:db.crateCollection("item")
> db.createCollection("item")
{ "ok" : 1 }
>
查看文档集合:show tables
> show tables;
item
>
3)添加文档
db.文档集合名称.insert(数据);
例如:db.item.insert({_id:"No1",name:"华为Mate 40 Pro",price:8500})
> db.item.insert({_id:"No1",name:"华为Mate 40 Pro",price:8500})
WriteResult({ "nInserted" : 1 })
> db.item.insert({_id:"No2",name:"华为Mate 40",price:6500})
WriteResult({ "nInserted" : 1 })
> db.item.insert({_id:"No3",name:"华为Mate 40 Pro +",price:12500})
WriteResult({ "nInserted" : 1 })
>
4)查询文档
查询所有:db.文档集合名称.find()
> db.item.find()
{ "_id" : "No1", "name" : "华为Mate 40 Pro", "price" : 8500 }
{ "_id" : "No2", "name" : "华为Mate 40", "price" : 6500 }
{ "_id" : "No3", "name" : "华为Mate 40 Pro +", "price" : 12500 }
>
分页查询:db.item.find().skip(2).limit(2)
> db.item.find().skip(2).limit(2)
{ "_id" : "No3", "name" : "华为Mate 40 Pro +", "price" : 12500 }
>
模糊查询(正则匹配):db.item.find({列名:匹配规则})
> db.item.find({name:/Pro/})
{ "_id" : "No1", "name" : "华为Mate 40 Pro", "price" : 8500 }
{ "_id" : "No3", "name" : "华为Mate 40 Pro +", "price" : 12500 }
>
复杂查询:
db.item.find({name:/^x/}) 以x开始的
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({条件})
5)修改文档
自增操作:db.item.update({_id:"No1"},{$inc:{price:1}})
> db.item.update({_id:"No1"},{$inc:{price:1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
>
指定列修改:db.item.update({_id:"No1"},{$set:{name:"华为P40 Pro"}})
> db.item.update({_id:"No1"},{$set:{name:"华为P40 Pro"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
>
6)删除文档
> db.item.remove({_id:"No3"})
WriteResult({ "nRemoved" : 1 })
>