MongoDB(一)

230 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第14天,点击查看活动详情

1、MongoDB

1)MongoDB安装

2)MongoDB常用操作

1 MongoDB

1.1 MongoDB介绍

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON (简称BSON)对象。字段值可以包含其他文档,数组及文档数组。

1604802898038

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-8Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)
​
Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)
​
Double:浮点数 (没有float类型,所有小数都是Double)
​
Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)
​
Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典
​
Null:空数据类型 , 一个特殊的概念,None NullTimestamp:时间戳
​
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" } ] });

效果如下:

1604807492359

权限说明:

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 })
>