• 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
没有结果
查看所有结果

MongoDB 存储方式、命令、增删改查、索引

Mr.Lee 由 Mr.Lee
2018年5月19日
在 MongoDB, 数据库
0
MongoDB 存储方式、命令、增删改查、索引
0
分享
0
浏览

NoSQL(MongoDB)

一、了解MongoDB

1、什么是MongoDB?

概念

MongoDB是NoSQL类型的文档型数据库。

2)什么是NoSQL?

NoSQL是非关系型数据存储的广义定义,通常以key-value形式存储数据,没

有表结构(注:memcache和redis也市nosql产品)。

NoSQL优点

易扩展

快速的读写

低廉的成本

架构的灵活性,没有复杂的关系

4)NoSQL缺点

没有标准化

没有正式的官方支持

、MongoDB存储方式

mongodb是文档型数据库,文件以BJSON格式存储在硬盘中。

BSON是JSON的一种二进制形式的存储格式.

mongodb内部执行引擎为JS解释器, 把文档存储成bson结构,在查询时,转换为JS对象,并可以通过熟悉的JS语法来操作.

简单总结:

mongodb是文档型数据库

mongodb、redis、memcache都属于nosql产品

什么是nosql:非关系型数据库的广泛定义、一般数据以键值对形式存储,没有表结构

redis和memcache存在内存中

mongodb存储在磁盘文件中

二、MongoDB的安装与配置

1、下载

http://www.mongodb.org/downloads

在32位系统上,数据库文件总共不能超过2G,否无法再插入数据。推荐使用64位操作系统。

安装成功后需要自己创建服务

2、安装








3、创建MongoDB 服务

  • 前 提:在mongodb安装目录下创建data目录用于存放后期数据
  • 创建服务:mongod –install –dbpath 数据目录 –logpath 日志文件
  • 删除服务:mongod –remove
  • 启动服务:net start MongoDB
  • 关闭服务:net stop MongoDB

4、连接MongoDB服务器

语法:mongo 服务ip地址:端口/数据库名

简写:mongo

默认端口27017

或者

三、Mongodb基本概念

  • MySQL数据库中有:数据库(Database)、表(table)、记录(Record)
  • mongodb数据库中有:数据库(database)、集合(collection)、文档(document)

MongoDB集合对应关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。

四、入门命令

1、库和集合操作

# 查看已有数据库

语法:show databases; 或者 show dbs;

举例:

# 选择数据库

语法:use 数据库

举例:

# 查看已有的集合/表

语法:show collections 或者 show table

举例:

# 创建集合(表)

语法:db.createCollection(集合名)

举例:

︴是否可以验证数据库是否自动创建

# 删除集合表

语法:db.集合名.drop()

举例:

删除库:db.dropDatabase();

2、增删修查(CURD)

# C 增

  • 语法:db.集合名.insert(json数据)
  • 说明:集合存在-则直接插入数据,集合不存在-则插入数据时自动创建
  • 举例:插入到test集合中,姓名叫zs年龄18岁

db.test.insert({name:’zs’,age:18});

插入成功自动创建一个唯一的ID

︴思考1:是否可以自定义_id值?

答:可以,插入的时候增加_id键即可替换

︴思考2:如何插入多条记录?

答:可以

语法:db.集合名.insert([

{},

{},

{}

]);

︴扩展练习:结合js循环插入多条记录?

循环:for

打印:print(变量名);

案例:循环显示1-10

需求:在test集合中循环插入8条数据:格式 name:heng自增 age:自增

for (var i =1; i<=8; i++) {

db.test.insert({name:”heng”+i, age:i});

}

# D 删

  • 语法:db.集合名.remove(条件,是否删除一条)
  • 说明:
  • 条件,就是写json格式数据
  • 是否删除一条:true-是,false-否(默认)



# U 改

# 创建测试数据

use test1;

db.createCollection(“c1”);

for(var i = 1; i<= 10; i++){

db.c1.insert( {“name”:”zs”+i,”age”:i} );

}

  • 语法:db.集合名.update(条件,新数据,是否新增,是否只修改多条)
  • 说明:
  • 参数3:是否新增(true-找不到则插入,false-找不到就不管,默认)
  • 参数4:是否修改多条(true-全部修改,false-只修改一条,默认)

︴练习1:将{name:“zs1“}改为{name:“zs2“}

db.c1.update({name:”zs1″}, {name:”zs2″});

︴思考1:如何解决练习1的(替换)问题?

发现:上述代码不是修改,而是替换新数据

解决:通过(修改器)

语法:db.集合名.update(条件,{修改器:{键:值}})

需求:将age=2的数据name改成zs22

————————————-

原本操作:db.c1.update({age:2}, {name:”zs22″});

瑕疵:替换数据

解决:使用修改器($set)

套用语法:db.c1.update({age:2},{$set:{name:”zs22″}})

︴练习2:给{name:“zs10“}的年龄加2岁

db.c1.update({name:”zs10″},{$inc: {age:2}});

多学一招:思考如何减年龄

回答:负数

db.c1.update({name:”zs10″},{$inc: {age:-2}});

︴练习3(修改器综合练习):

  • 数据:

db.test3.insert( {name:”猪八戒”,age:888,who:”男”,other:”非国人”});

  • 需求:

name 改成 孙悟空 ( 修改器:$set)

age 增加 111 ( 修改器:$inc)

who 改字段 sex ( 修改器:$rename)

other 删除 (修改器:$unset)

db.test3.update(条件, );

{修改器:{键:值}}

{$set:{name:”猴子”}}

{$inc:{age:111}}

{$rename:{who:”sex”}}

{$unset:{other:”非国人”}}

组合一起使用修改器

db.test3.update({name:”猪八戒”}, {

$set:{name:”猴子”},

$inc:{age:111},

$rename:{who:”sex”},

$unset:{other:”非国人”}

});

︴练习4:验证语法最后两个参数:是否新增[默认false], 是否修改多条[默认false]

  • 验证是否新增:修改name 等于 zs30的年龄 30岁

  • 验证是否修改多条:修改name 等于 zs2的年龄 22岁

# R 查

  • 语法:db.集合名.find(条件[,查询的列])
  • 查询条件说明:
  • {name:”zs”} 查询name等于zs的数据
  • {age:18} 查询age等于18的数据
  • {name:”zs”, age:18} 查询name等于zs并且age等于18的数据
  • 查询的列说明
  • {name:1} 查询的数据只显示name字段
  • {name:0} 查询的数据显示所有字段,除name意外
  • {name:1, age:0} 只查询name字段

︴练习:查询所有数据

︴思考1:查询年龄大于5岁的数据?

语法:db.test.find({键:{修改器:值}});

案例:db.test.find({age:{$gt:5}});

︴思考2:查询年龄是5岁、8岁、10岁的数据?

案例:db.test.find({age:{$in:[5,8,10]}});

总结

什么是Mongodb:nosql类型的文档型数据库

什么是nosql:非关系型数据库的广泛定义,一般以键值对象形式存储,不需要设计表结构的数据库可以称之为

—————————–

【安装】

安装服务:mongod –install –dbpath=数据目录 –logpath=日志文件

卸载服务:mongod –remove

启动服务:net start MongoDB

停止服务:net stop MongoDB

—————————–

【入门命令】

查看数据库: show databases; 或 show dbs;

查看集合/表:show tables; 或 show collections;

选择数据库: use 数据库名(注:不存在不会报错,后期插入数据会自动创建)

创建集合: db.createCollection(集合名)

删除集合: db.集合名.drop();

删除数据库: db.dropDatabase();

—————————————————

【增】

语法:db.集合名.insert(json数据)

说明:集合存在-则直接插入数据,不存在-则创建

—————————————————

【删】

语法:db.集合名.remove(条件,是否删除一条)

说明:是否删除一条(true-是,false-否,默认)

—————————————————

【改】

语法:db.集合名.update(条件,新数据,是否新增,是否删除多条)

说明:

参数3:是否新增(true-未匹配数据则新增,false匹配到数据则修改,默认)

参数4:是否删除多条(true-删除多条,false-只删一条,默认)

单修改器语法:db.集合名.update(条件,{修改器:{键:值}})

多修改器语法:db.集合名.update(条件,{

修改器:{键:值},

修改器:{键:值},

修改器:{键:值}

})

—————————————————-

【查】

语法1:db.集合名.find(条件,查询的列)

语法2:db.集合名.findOne();

格式化打印:find().pretty()

五、MongoDB的权限机制

1、权限机制概述

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

3.x.x版本默认看不到admin数据库,但是可以选择并查看对应的表;

2.x.x版本 通过show dbs 可以直接查看admin数据库

开启验证模式

1)概念

开启验证模式:就是登陆需要输入账号密码

先登陆创建超级管理员

然后卸载服务

再通过验证模式开启服务(说白了,增加参数让后期输入账号密码才可以登陆)

2)添加超级管理员

  • 步骤1:登录

  • 步骤2:选择admin数据库

  • 步骤3:在admin数据库中添加用户(超级管理员)

db.createUser({

“user” : “admin”,

“pwd”: “admin888”,

“customData” : {employeeId:”提示密码admin888″},

“roles” : [{

role: “root”,

db: “admin”

}]

})

user 代表登录的用户名

pwd 代表登录的密码

customData 备注

role 角色

db 所属数据库

角色信息介绍

角色作用

3)重新以验证模式启动mongod服务

  • 步骤1:卸载服务

net stop MongoDB

mongod –remove

  • 步骤2:开启验证模式服务(参数–auth)

mongod –install –dbpath=E:\mongodb\data –logpath=E:\mongodb\log1.txt –auth

  • 步骤3:启动服务

通过超级管理员账号登陆

  • mongo 服务器IP地址:端口/数据库 -u 用户名 -p 密码

  • 登录之后输入,db.auth(用户名,密码)

︴课堂案例:

■ 需求

添加用户shop1可以读shop数据库

添加用户shop2可以读写shop数据库

脚下留心:必须在对应数据库创建用户

1)创建测试数据和测试用户(注:选择shop仓库创建用户)

use shop;

for(var i=1; i<=10; i++) {

db.goods.insert({“name”:”goodsName”+i,”price”:i});

}

2)添加用户并设置权限

【shop1】

db.createUser({

“user” : “shop1”,

“pwd”: “admin888”,

“customData” : {employeeId:”提示密码admin888″},

“roles” : [{

role: “read”,

db: “shop”

}]

})

【shop2】

db.createUser({

“user” : “shop2”,

“pwd”: “admin888”,

“customData” : {employeeId:”提示密码admin888″},

“roles” : [{

role: “readWrite”,

db: “shop”

}]

})

验证:shop1可读

3)验证:shop2验证可读可写

六、MongoDB的索引

1、情景设置

向数据库中新增十万条数据

//选择数据库

use test;

//向数据库中添加数据

for(var i=0;i<100000;i++){

db.data1.insert({‘name’:”aaa”+i,”age”:i});

}

2、索引的建立

1)语法

  • 创建索引语法:db.集合名.createIndex(待创建索引字段,额外选项)
  • 参数:
  • 待创建索引字段,语法:{键:1,键:-1}(说明:1表示升序,-1表示降序) ,如:

{age:1}表示给age创建索引并且按照升序的方式存储

  • 额外选项,可以设置索引名称,设置唯一索引等
  • 删除索引语法:
  • db.集合名.dropIndexes() 删除全部索引
  • db.集合名.dropIndex(索引名) 删除指定索引
  • 查看索引语法:db.集合名.getIndexes()

创建普通索引

需求:给name添加普通索引

语法:

删除索引

给name创建索引并起名chenheng

创建复合/组合索引

需求:给name和age添加组合索引

说明:组合/符合索引就是给两个字段同时加索引(复习:mysql中index(字段1,字段2))

语法:db.集合名.createIndex({键:值,键:值});

创建唯一索引

需求:给name添加普通索引

语法:db.集合名.createIndex(待添加索引的字段,{unique:true})

【设置索引特性】

【测试唯一索引特性】

3、分析索引(explain) executionStats

  • 语法:db.集合名.find().explain(‘executionStats’)
  • 说明:

COLLSCAN 全表扫描

IXSCAN 索引扫描

FETCH 根据索引去检索指定document

  • 练习:

age未添加索引情况


age添加索引情况




七、数据库的备份和还原

1、备份数据库(mongodump)

1)语法

  • 导出数据语法:mongodump -h __ -port __ -u __ -p __ -d __ -o __
  • 说明
  • -h 服务器ip地址(默认:127.0.0.1)
  • -port 端口号(默认:27017)
  • -u 用户名(开启认证模式则必须)
  • -p 密码(开启认证模式则必须)
  • -d 备份数据库(注:不写则代表全部)
  • -o 备份目录

练习

  • 备份所有数据:mongodump -u admin -p admin888 -o E:\mongodb\bak

  • 备份指定数据:mongodump -u shop1 -p admin888 -d shop -o E:\mongodb\bak2

2、还原数据库(mongorestore)

1)语法

  • 还原数据语法:mongorestore -h __ -port __ -u __ -p __ -d__ –drop 原备份数据目录
  • 说明
  • -h 服务器ip地址(默认:127.0.0.1)
  • -port 端口号(默认:27017)
  • -u 用户名(开启认证模式则必须)
  • -p 密码(开启认证模式则必须)
  • -d database 数据库(不写则还原全部数据库)
  • –drop 先删除所有的记录,然后恢复

2)练习

  • 还原所有数据:mongorestore -u admin -p admin888 –drop E:\mongodb\bak



切记不要删除admin数据库

  • 还原指定数据:mongorestore -u admin -p admin888 -d shop –drop E:\mongodb\bak2



八、PHP 操作MongoDB

1、开启mongodb扩展

1)查看PHP版本信息,选择对应mongodb扩展

2)让PHP支持操作mongo扩展

步骤1:将mongo.dll扩展文件移动到PHP的ext目录中

步骤2:修改php配置文件(php.ini)

步骤3:重启服务

3)运行 phpinfo() 查询是否设置成功。

2、PHP代码

1、php添加数据

<?php

//1.创建对象

$username = ‘admin’;

$password = ‘admin888’;

$host = ‘127.0.0.1’;

$mongodb = new Mongo(“mongodb://{$username}:{$password}@{$host}”);

// var_dump($mongodb);

//MongoDB语法:$对象->数据库名->集合名->增查改删指令();

//多学一招:之前在mongodb窗口输入json数据,先通过php统一改成数据

//增:给php12数据库的test2集合中插入一条数据(name:l4,age:18)

$rs = $mongodb->php12->test2->insert(array(

‘name’ => ‘l4’,

‘age’ => 18

));

var_dump($rs);

//————

echo ‘<hr />’;

发现:开启验证模式后通过PHP操作失败

解决:mongodb3版本存在一个bug,需要将currentVersion改成3,从新添加用户即可

步骤1:关闭并卸载服务

步骤2:创建服务(注:非验证模式)

mongod –install –dbpath=e:\mongodb\data –logpath=e:\mongodb\log1.txt

步骤3:登录将currentVersion的数字改成3即可

步骤4:删除admin用户,创新创建


步骤5:退出、停止服务、并卸载服务

步骤6:重新创建验证模式即可

mongod –install –dbpath=e:\mongodb\data –logpath=e:\mongodb\log3.txt –auth

2、php修改数据

<?php

//1.创建对象

$username = ‘admin’;

$password = ‘admin888’;

$host = ‘127.0.0.1’;

$mongodb = new Mongo(“mongodb://{$username}:{$password}@{$host}”);

// var_dump($mongodb);

//MongoDB语法:db.集合名.update(条件, {修改器:{键:值}});

//PHP中语法:$对象->数据库名->集合名->改(就是将花括号改成数组即可);

//需求:将php12数据库中的test2集合中的数据name改成 z3即可

$rs = $mongodb->php12->test2->update(

array(),

array(‘$set’=>array(‘name’=>’z3’)),

array(‘multiple’ => true)

);

var_dump($rs);

3、PHP遍历数据

<?php

//1.创建对象

$username = ‘admin’;

$password = ‘admin888’;

$host = ‘127.0.0.1’;

$mongodb = new Mongo(“mongodb://{$username}:{$password}@{$host}”);

// $rs = $mongodb->php12->test2->findOne();

// echo ‘<pre>’;

// print_r($rs);

echo ‘<pre>’;

$rs = $mongodb->php12->test2->find();

foreach ($rs as $data) {

print_r($data);

}

标签: 命令增删改查存储方式索引
上一篇文章

Nginx 服务器集群、负载均衡、CDN

下一篇文章

Redis 安装部署、数据类型、应用场景、TP中使用Redis

下一篇文章
Redis 安装部署、数据类型、应用场景、TP中使用Redis

Redis 安装部署、数据类型、应用场景、TP中使用Redis

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Search

没有结果
查看所有结果

About Me

个人随笔

Winston Lee

Programmer

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Winston Lee

About Me

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Categories

  • AJAX
  • BootStrap
  • CodeIgniter
  • CSS
  • DedeCMS
  • GIT
  • HTML
  • Javascript
  • Jquery
  • Laravel
  • Laravel在线教育平台
  • Linux
  • Memcache
  • MongoDB
  • MVC
  • Mysql
  • Nginx
  • Node
  • PDO
  • PHP
  • PHP7
  • PHP基本语法
  • PHP核心编程
  • Redis
  • Smarty
  • Socket
  • SVN
  • Swoole
  • TP3.2
  • TP3.2商城
  • TP5.0
  • TP5.0商城
  • XML
  • Yaf
  • Yii
  • Yii手机直播
  • 二次开发
  • 优化方案
  • 前端技术
  • 前端框架
  • 后台框架
  • 基本操作
  • 微信公众号
  • 数据库
  • 未分类
  • 混合APP
  • 源码Blog项目
  • 版本控制
  • 环境搭建
  • 移动端开发
  • 网站优化
  • 资料
  • 面向对象
  • 面向对象编程
  • 页面静态化

Tags

DOM Json RBAC 事件 传参 函数 分页 判断语句 匿名函数 变量 图片上传 存储过程 安装 对象 封装 属性 接口 控制器 数据库操作 数据类型 数据表 数组 文件上传 无刷新分页 权限 标签 模型 正则 流程控制 目录结构 算法 类 索引 继承 缩略图 表关系 视图 路由 运算符 选择器 递归 配置 错误处理 页面静态化 验证码
  • 首页
  • 前端
  • 前端框架
  • PHP
  • 数据库
  • 优化
  • 后台框架与实战
  • 移动开发
  • 二次开发
  • Linux
  • 版本控制
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3

没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3