MongoDB学习笔记

MongoDB学习笔记

莫等闲
莫等闲
1年前

优劣:

高性能、易部署、易使用,存储数据非常方便。

不支持连表查询,不支持sql语句,不支持事务存储过程等,所以不适合存储数据间关系比较复杂的数据,一般主要是当做一个数据仓库来使用。

适用于:日志系统,股票数据等。

不适用于:电子商务系统等需要连多表查询的功能。

安装(docker)

docker pull mongo
docker run -itd --name mongo -p 27017:27017 7911 [--auth]  # --auth 需要密码才能访问
docker exec -it mongo bash # 进入容器

概念

文档

文档是mongoDB中数据的基本单元,类似关系数据库的行, 多个键值对有序地放置在一起便是文档。 MongoDB 中以文档的方式存取记录,如一条记录格式如下:

{ “username”:”Tom”, “age”:10 ,email:’abc@qq.com’,’sex’:男,键,值}

{ "username":"Tom" , "age" : "10" } 

{“Username”:”Tom”,”age”:10} 

{“Username”:”Tom” } 

注意:

(1)以上是几个不同的文档,MongoDB区分大小写的数据类型,第一个age字段是数字类型,第二个age是字符串类型。

(2)每一个文档尺寸不能超过16M

集合

集合就是一组文档,多个文档组成一个集合,集合类似于 mysql里面的表 。

无模式是指,在同一个集合中可以包含不同格式的文档,如:

{  "Name" : "Mongodb" , "Type" : "Nosql" }

{  "UserName" : "Tom" , "age" : 20 , "Gender" : "male" }

以上两个文档可以放在同一个集合中。

在Mysql需要先建表再插入数据,

模式自由(schema-free):意思是集合里面没有行和列的概念

注意:MongoDB中的集合不用创建没有结构,所以可以放不同格式的文档。

数据库

多个集合可以组成数据库。一个mongoDB实例可以承载多个数据库,他们之间完全独立。

Mongodb中的数据库和Mysql中的数据库概念类似,只是无需创建

一个数据库中可以有多个集合。一个集合中可以有多个文档。

其他

  1. 单个文档最大16M, 32位系统上单个数据库最大2G

简单使用

连接

linux下启动mongo后使用mongo命令连接

mongo 127.0.0.1:27017 # mongodb://127.0.0.1:27017

可以使用mongo --help查看帮助

语法

use 数据库

如果不存在,则创建,否则切换。如果创建了没有做任何操作会自动删除。

show dbs

查看数据库列表

添加文档

db.集合名.insertOne({})

集合隐式创建,所以可以直接使用, db表示当前数据库,也就是前面use的数据库,可以使用db命令查看当前数据库,添加命令如下

db.test.insertOne({"name": "max"})

数据类型是BSON, 支持的值更丰富

在添加的数据中都有一个"_id"的键,值为对象类型

{ "_id" : ObjectId("61a365b5e2e6abe7dea43ac8"), "name" : "tet" }

ObjectId类型:

每个文档都有一个_id字段,并且同一集合中的_id值唯一,该字段可以是任意类型的数据,默认是一个ObjectId对象。

ObjectId对象**对象数据组成:时间戳|机器码|PID|计数器, _id的键值我们可以自己输入,但是不能重复,重复会报错

使用js批量插入

for(var i = 0; i  可以使用操作符 $lt , $lte , $gt , $gte  (  , >= ), $ne (  ) ,$in , $nin , $or , $not, $mod (取模), $exists, $where

例如

db.users.find({"age": {"$gt": 12}}, {"name": 1})  // 只显示年龄大于12的用户名字
db.users.find({"age": {"$gt": 12}}, {"name": 0})  // 年龄大于12的用户,除了名字其他都显示
db.users.find({}, {"$lt": 1})

排序

db.test.find().sort({"age": 1}) //根据年龄升序, -1为降序

限制

db.test.find().limit(3)  // 查询前3条
db.test.find().skip(3).limit(2)  // 查询偏移量为3的2个文档

count

db.test.count() // 查询集合文档总数

删除文档

db.集合名.remove({条件}) // 如果没有条件会删除所有

例如

db.users.remove({”age“: 5})  // 删除用户中年龄等于5的文档
db.users.remove({"age": {"$gt": 8}})

删除集合

db.集合名.drop()

删除数据库

use 数据库
db.dropDatabase()

更新文档

直接修改

db.集合名.update(条件,新文档, 是否新增, 是否修改多条)

是否新增:如果值是1(true)则没有满足条件的则添加。

是否修改多条:若值是1(true),如果满足条件的有多个文档则都要修改

db.users.update({"age": 3}, {"age": 4}, true, true)

上面的修改会导致其他数据键值丢失,所以不推荐

使用修改器

$inc : 加一个数字

$set : 修改某一个字段,如果该字段不存在就增这个字段

db.集合名.update({条件}, {修改器名称: {修改的键: 修改后的值}})

例如

db.test.update({"name": "maxphp"}, {"$set": {"age": 14}}, true, true)  // 将所有名字为maxphp的修改年龄为14
db.test.update({"age": 14}, {"$inc": {"age": 100}})  // 将年龄为14的一个年龄增加100

帮助

help            // 全局
db.help()       // 数据库相关帮助
db.集合名.help() // 集合相关帮助

用户管理(权限控制)

在mongodb里面的用户是属于数据库的,每个数据库有自己的管理员,管理员登录后,只能操作所属的数据库。

注意:一般在admin数据库中创建的用户授予超级管理员权限,登录后可以操作任何的数据库。

创建用户

注意:在开启权限管理控制时,一定先要创建一个超级管理员授予超级管理权限。

use admin
db.createUser({user: "root", pwd: "123456", roles: [{role: "root", db: "admin"}]})  // 创建超级管理员


use php
db.createUser({user: "phpadmin", pwd: "123456", roles: [{role: "dbOwner", db: "php"}]}) // 创建普通用户

用户相关

show users // 查看当前库的所有用户
db.dropUser("username") // 删除用户
db.updateUser("admin", {pwd: "password"}) // 修改admin密码
ab.auth("user", "pass") // 使用密码认证

登录

mongo 数据库 -u 用户名 -p 密码    // 本地
mongo IP地址:端口/数据库名称 -u 用户名 -p 密码  // 远程

角色

(1)数据库用户角色:read、readWrite;

(2)数据库管理角色:dbAdmin、dbOwner、userAdmin;

(3)集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;

(4)备份恢复角色:backup、restore;

(5)所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、 dbAdminAnyDatabase

(6)超级用户角色:root

THE END

猜你喜欢

推荐了几个

查看更多

Nginx-基础总结

# 常规配置模板 ``` #user www www; worker_processes auto; error_log /home/wwwlogs/nginx_error.log crit; #pid /usr/loc

Windows下配置多版本PHP开发环境,自由切Composer

Windows下配置多个不同php版本共存是件麻烦事,之前一直使用WSL2, 由于WSL2读取windows文件速度极慢,所以需要将文件上传到WSL2内部,虽然PhpStorm支持自动上传,但是文件同步不是很好。于是切换到WSL1,读取速度

LNMP安装与配置

> 以下所有软件均安装在/usr/local目录,如果修改,需要注意配置文件中的路径。所有软件配置用户和用户组均为www,系统采用Ubuntu20或者Centos8 (opencloudos) 。 # linux 安装与配置:不赘述,一般

Windows服务管理

通常可以通过`运行` -> `services.msc` 启动Windows服务管理,但是可以做的操作有限,所以主要介绍下命令行下如何管理服务。因为需要管理员权限,所以通过以下步骤启动命令行/Powershell(管理员): `运行` ->

Mysql基础命令及语法笔记

# show 命令 > help show 查看允许的show语句 ```sql show databases show tables show [full] columns from <table> show create datab

npm & yarn 更换源等常用命令或操作

# npm > 由于node下载第三方依赖包是从国外服务器下载,虽然没有被墙,但是下载的速度是非常的缓慢且有可能会出现异常。 > 所以为了提高效率,我们还是把npm的镜像源替换成淘宝的镜像源。有几种方式供我们选择 ## 使用cnpm

PHP如何实现Aop

# 前言 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring

MongoDB学习笔记

# 优劣: 高性能、易部署、易使用,存储数据非常方便。 不支持连表查询,不支持sql语句,不支持事务存储过程等,所以不适合存储数据间关系比较复杂的数据,一般主要是当做一个**数据仓库**来使用。 **适用于**:日志系统,股票数据等。