Mongo--02 命令介绍
Mongo工具
1. 查看指令
test:登录时默认存在的库
admin库:系统预留库,MongoDB系统管理库
local库:本地预留库,存储关键日志
config库:MongoDB配置信息库
查看数据库命令
show databases/show dbs
show tables/show collections
use admin
db/select database()
2.插入命令
1.插入单条
db.user_info.insert({"name":"zhangya","age":27,"ad":"北京市朝阳区"})
db.user_info.insert({"name":"zhangya","age":27,"ad":"北京市朝阳区"})
db.user_info.insert({"name":"yazhang","age":28,"ad":"北京市朝阳区"})
db.user_info.insert({"name":"xiaozhang","age":28,"ad":"北京市朝阳区"})
db.user_info.insert({"name":"xiaozhang","age":28,"ad":"北京市朝阳区","sex":"boy"})
2.插入多条
db.inventory.insertMany( [
{ "item": "journal", "qty": 25, "size": { "h": 14, "w": 21, "uom": "cm" }, "status": "A" },
{ "item": "notebook", "qty": 50, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "A" },
{ "item": "paper", "qty": 100, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "D" },
{ "item": "planner", "qty": 75, "size": { "h": 22.85, "w": 30, "uom": "cm" }, "status": "D" },
{ "item": "postcard", "qty": 45, "size": { "h": 10, "w": 15.25, "uom": "cm" }, "status": "A" }
]);
3.查询命令
#输入db.user_info.之后table键可以查看支持的函数
> db.user_info.
db.user_info.addIdIfNeeded(
db.user_info.aggregate(
db.user_info.bulkWrite(
db.user_info.constructor
db.user_info.convertToCapped(
db.user_info.convertToSingleObject(
db.user_info.copyTo(
db.user_info.count(
db.user_info.createIndex(
db.user_info.createIndexes(
db.user_info.dataSize(
db.user_info.deleteMany(
db.user_info.deleteOne(
db.user_info.diskStorageStats(
db.user_info.distinct(
db.user_info.drop(
db.user_info.dropIndex(
db.user_info.dropIndexes(
db.user_info.ensureIndex(
db.user_info.exists(
db.user_info.explain(
db.user_info.find(
db.user_info.findAndModify(
db.user_info.findOne(
db.user_info.findOneAndDelete(
db.user_info.findOneAndReplace(
db.user_info.findOneAndUpdate(
db.user_info.getCollection(
db.user_info.getDB(
db.user_info.getDiskStorageStats(
db.user_info.getFullName(
查询命令总结:
1.查询一条
db.user_info.findOne()
2.查询所有
db.user_info.find()
3.查询符合条件
db.user_info.find({"age":28})
#相当于mysql中的命令
select * from user_info where age = 28;
4.查询嵌套的条件
db.inventory.find( { "size.uom": "in" } )
#json格式如下:
db.inventory.find(
{
"size.uom": "in"
}
)
5.逻辑查询:and
db.inventory.find( { "size.uom": "cm" ,"status" : "A"} )
#json格式如下:
db.inventory.find(
{
"size.uom": "cm" ,
"status" : "A"
}
)
6.逻辑查询 或
db.inventory.find(
{
$or:[
{status:"D"},
{qty:{$lt:30}}
]
}
)
7.逻辑查询+或+and+正则表达式
db.inventory.find({status:"A",$or:[{qty:{$lt:30}},{item:/^p/}]})
#json格式如下:
db.inventory.find(
{
status: "A",
$or: [
{ qty: { $lt: 30 } },
{ item: /^p/ }
]
}
)
4.更新数据
1.更改匹配条件的单条数据
如:
#查询
> db.inventory.find({ "item" : "paper" })
{ "_id" : ObjectId("5dfa03a490425c3c47b6b8cf"), "item" : "paper", "qty" : 100, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "D" }
#更新
> db.inventory.updateOne(
... { "item" : "paper" },
... {
... $set: {
... "size.uom" : "cm",
... "status" : "P"
... }
... }
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
#再次查询
> db.inventory.find({ "item" : "paper" })
{ "_id" : ObjectId("5dfa03a490425c3c47b6b8cf"), "item" : "paper", "qty" : 100, "size" : { "h" : 8.5, "w" : 11, "uom" : "cm" }, "status" : "P" }
2.更改匹配条件的多条数据
#查询qty并且值小于50的
> db.inventory.find({ "qty" : { $lt: 50 } })
{ "_id" : ObjectId("5dfa03a490425c3c47b6b8cd"), "item" : "journal", "qty" : 25, "size" : { "h" : 14, "w" : 21, "uom" : "m" }, "status" : "A" }
{ "_id" : ObjectId("5dfa03a490425c3c47b6b8d1"), "item" : "postcard", "qty" : 45, "size" : { "h" : 10, "w" : 15.25, "uom" : "m" }, "status" : "A" }
#修改uom 对应的值为mm,status对应的值为P
> db.inventory.updateMany(
... { "qty" : { $lt: 50 } },
... {
... $set:
... {
... "size.uom" : "mm",
... "status": "P"
... }
... }
... )
{ "acknowledged" : true, "matchedCount" : 2, "modifiedCount" : 0 }
#再次查询,可以看到改变
> db.inventory.find({ "qty" : { $lt: 50 } })
{ "_id" : ObjectId("5dfa03a490425c3c47b6b8cd"), "item" : "journal", "qty" : 25, "size" : { "h" : 14, "w" : 21, "uom" : "mm" }, "status" : "P" }
{ "_id" : ObjectId("5dfa03a490425c3c47b6b8d1"), "item" : "postcard", "qty" : 45, "size" : { "h" : 10, "w" : 15.25, "uom" : "mm" }, "status" : "P" }
3.添加字段
#查询
> db.user_info.find({ "age" : 27})
{ "_id" : ObjectId("5dfa035e90425c3c47b6b8ca"), "name" : "zhangya", "age" : 27, "ad" : "北京市朝阳区"}
#添加字段
> db.user_info.updateMany(
... { "age" : 27},
... {
... $set:
... {
... "pet" : "cat"
... }
... }
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 0 }
#再次查询
> db.user_info.find({ "age" : 27})
{ "_id" : ObjectId("5dfa035e90425c3c47b6b8ca"), "name" : "zhangya", "age" : 27, "ad" : "北京市朝阳区", "pet" : "cat" }
5.索引
1.查看执行计划
db.user_info.find({"age":{ $lt: 30 }})
#加上explain查询
db.user_info.find({"age":{ $lt: 30 }}).explain()
2.创建索引(给age创建索引,background:true 意思是放在后台执行这个集合)
> db.user_info.createIndex({ age: 1 },{background: true})
{
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"note" : "all indexes already exist",
"ok" : 1
}
3.查看索引,会发现多了一个索引
> db.user_info.getIndexes()
[
{
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.user_info"
},
{
"v" : 2,
"key" : {
"age" : 1
},
"name" : "age_1",
"ns" : "test.user_info",
"background" : true
}
]
4.再次查看执行计划
>db.user_info.find({"age":{ $lt: 30 }}).explain()
...
#结果中有出现IXSCAN
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"age" : 1
},
"indexName" : "age_1",
...
关键词
"stage" : "IXSCAN"
"indexName" : "age_1"
其他索引类型
COLLSCAN – Collection scan (类似于mysql的全表扫描)
IXSCAN – Scan of data in index keys (走索引)
FETCH – Retrieving documents
SHARD_MERGE – Merging results from shards
SORT – Explicit sort rather than using index orde
5.删除
1.先查找需要删除的数据
> db.inventory.find({"status":"P"})
{ "_id" : ObjectId("5dfa03a490425c3c47b6b8cd"), "item" : "journal", "qty" : 25, "size" : { "h" : 14, "w" : 21, "uom" : "mm" }, "status" : "P" }
{ "_id" : ObjectId("5dfa03a490425c3c47b6b8cf"), "item" : "paper", "qty" : 100, "size" : { "h" : 8.5, "w" : 11, "uom" : "cm" }, "status" : "P" }
{ "_id" : ObjectId("5dfa03a490425c3c47b6b8d1"), "item" : "postcard", "qty" : 45, "size" : { "h" : 10, "w" : 15.25, "uom" : "mm" }, "status" : "P" }
2.删除单条deleteOne
db.inventory.deleteOne({"status":"P"})
3.删除多个deleteMany
db.inventory.deleteMany({"status":"P"})
4.删除索引
db.user_info.dropIndex("age_1")
4.删除集合
#查看
> show tables
inventory
user_info
#删除集合
> db.inventory.drop()
true
#再次查看
> show tables
user_info
5.删除库
#查看库
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
#当前所在的库
> db
test
#删除当前所在的库
> db.dropDatabase()
{ "dropped" : "test", "ok" : 1 }
#再次查看
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
6.mongo命令介绍
mongod #启动命令
mongo #登录命令
mongodump #备份导出,全备压缩
mongorestore #备份恢复
mongoexport #备份,数据可读json(适用于单个集合)
mongoimport #备份恢复
mongostat #查看mongo运行状态
mongotop #查看mongo运行状态
mongos #集群分片命令
.mongostat状态解释
[mongo@db01 ~]$ mongostat
insert query update delete getmore command dirty used flushes vsize res qrw arw net_in net_out conn time
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 974M 46.0M 0|0 1|0 157b 60.6k 1 Dec 19 00:55:32.632
*0 *0 *0 *0 0 1|0 0.0% 0.0% 0 974M 46.0M 0|0 1|0 157b 60.5k 1 Dec 19 00:55:33.633
#各字段解释说明:
insert/s : 官方解释是每秒插入数据库的对象数量,如果是slave,则数值前有*,则表示复制集操作
query/s : 每秒的查询操作次数
update/s : 每秒的更新操作次数
delete/s : 每秒的删除操作次数
getmore/s: 每秒查询cursor(游标)时的getmore操作数
command: 每秒执行的命令数,在主从系统中会显示两个值(例如 3|0),分表代表 本地|复制 命令
注: 一秒内执行的命令数比如批量插入,只认为是一条命令(所以意义应该不大)
dirty: 仅仅针对WiredTiger引擎,官网解释是脏数据字节的缓存百分比
used:仅仅针对WiredTiger引擎,官网解释是正在使用中的缓存百分比
flushes:
For WiredTiger引擎:指checkpoint的触发次数在一个轮询间隔期间
For MMAPv1 引擎:每秒执行fsync将数据写入硬盘的次数
注:一般都是0,间断性会是1, 通过计算两个1之间的间隔时间,可以大致了解多长时间flush一次。flush开销是很大的,如果频繁的flush,可能就要找找原因了
vsize: 虚拟内存使用量,单位MB (这是 在mongostat 最后一次调用的总数据)
res: 物理内存使用量,单位MB (这是 在mongostat 最后一次调用的总数据)
注:这个和你用top看到的一样, vsize一般不会有大的变动, res会慢慢的上升,如果res经常突然下降,去查查是否有别的程序狂吃内存。
qr: 客户端等待从MongoDB实例读数据的队列长度
qw:客户端等待从MongoDB实例写入数据的队列长度
ar: 执行读操作的活跃客户端数量
aw: 执行写操作的活客户端数量
注:如果这两个数值很大,那么就是DB被堵住了,DB的处理速度不及请求速度。看看是否有开销很大的慢查询。如果查询一切正常,确实是负载很大,就需要加机器了
netIn:MongoDB实例的网络进流量
netOut:MongoDB实例的网络出流量
注:此两项字段表名网络带宽压力,一般情况下,不会成为瓶颈
conn: 打开连接的总数,是qr,qw,ar,aw的总和
注:MongoDB为每一个连接创建一个线程,线程的创建与释放也会有开销,所以尽量要适当配置连接数的启动参数,maxIncomingConnections,阿里工程师建议在5000以下,基本满足多数场景
7.创建用户和角色
#与用户相关的命令
db.auth() 将用户验证到数据库。
db.changeUserPassword() 更改现有用户的密码。
db.createUser() 创建一个新用户。
db.dropUser() 删除单个用户。
db.dropAllUsers() 删除与数据库关联的所有用户。
db.getUser() 返回有关指定用户的信息。
db.getUsers() 返回有关与数据库关联的所有用户的信息。
db.grantRolesToUser() 授予用户角色及其特权。
db.removeUser() 已过时。从数据库中删除用户。
db.revokeRolesFromUser() 从用户中删除角色。
db.updateUser() 更新用户数据。
1.创建管理用户
mongo db01:27017
#先进到admin库
use admin
#先查看用户(当前没有用户)
> db.getUsers()
[ ]
#创建用户
db.createUser(
{
user: "admin",
pwd: "123456",
roles:[
{
role: "root",
db:"admin"
}
]
}
)
2.查看创建的用户
> db.getUsers()
[
{
"_id" : "admin.admin",
"userId" : UUID("b056b2c5-705b-49bc-9b5f-c6d7d295501d"),
"user" : "admin",
"db" : "admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
]
3.退出,配置文件添加权限认证参数
[mongo@db01 ~]$ tail -2 /opt/mongo_27017/conf/mongodb.conf
security:
authorization: enabled
4.重启mongo
[mongo@db01 ~]$ mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
[mongo@db01 ~]$ mongod -f /opt/mongo_27017/conf/mongodb.conf
5.使用admin用户登录
[mongo@db01 ~]$ mongo db01:27017 -uadmin -p --authenticationDatabase admin
6.创建其他用户
>use test
>db.createUser(
{
user: "mysun",
pwd: "123456",
roles: [ { role: "readWrite", db: "write" },
{ role: "read", db: "read" } ]
}
)
7.创建测试数据
>use write
>db.write.insert({"name":"zhangya","age":27,"ad":"北京市朝阳区"})
db.write.insert({"name":"zhangya","age":27,"ad":"北京市朝阳区"})
db.write.insert({"name":"yazhang","age":28,"ad":"北京市朝阳区"})
db.write.insert({"name":"xiaozhang","age":28,"ad":"北京市朝阳区"})
db.write.insert({"name":"xiaozhang","age":28,"ad":"北京市朝阳区","sex":"boy"})
>use read
>db.read.insert({"name":"zhangya","age":27,"ad":"北京市朝阳区"})
db.read.insert({"name":"zhangya","age":27,"ad":"北京市朝阳区"})
db.read.insert({"name":"yazhang","age":28,"ad":"北京市朝阳区"})
db.read.insert({"name":"xiaozhang","age":28,"ad":"北京市朝阳区"})
db.read.insert({"name":"xiaozhang","age":28,"ad":"北京市朝阳区","sex":"boy"})
8.退出admin,使用mysun用户登录
[mongo@db01 ~]$ mongo db01:27017 -umysun -p --authenticationDatabase test
#普通mysun用户登录,write库,可读可写
>use write
> db.write.find()
> db.write.insert({"name":"zhangya","age":27,"ad":"北京市朝阳区"})
#read库,只可读,写的话会报错
> use read
switched to db read
> db.read.find()
> db.read.insert({"name":"zhangya","age":27,"ad":"北京市朝阳区"})
9.修改用户权限,必须以admin的用户登录,普通用户修改不了
use test
db.updateUser(
'mysun',
{
pwd: "123456",
roles: [ { role: "readWrite", db: "write" },
{ role: "readWrite", db: "read" } ,
{ role: "readWrite", db: "test" }
]
}
)
10.删除用户,也必须以admin的用户登录
db.getUsers()
db.dropUser('mysun')
Mongo--02 命令介绍的更多相关文章
- Mongo db 简单介绍及命令笔记
首先来了解下什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为W ...
- Hadoop生态圈-phoenix完全分布式部署以及常用命令介绍
Hadoop生态圈-phoenix完全分布式部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. phoenix只是一个插件,我们可以用hive给hbase套上一个JDBC壳,但是你 ...
- 3.Metasploit攻击流程及命令介绍
Metasploit 进阶第一讲 攻击流程及命令介绍 01.渗透测试过程环节(PTES) 1.前期交互阶段:与客户组织进行交互讨论,确定范围,目标等 2.情报搜集阶段:获取更多目标组织信 ...
- CentOS 7基础命令介绍
01 CentOS基础命令介绍 重所周知,Linux是一个主要通过命令行来进行管理的操作系统,即通过键盘输入指令来管理系统的相关操作,包括但不限于编辑文件.启动/停止服务等.这和初学者曾经使用的Win ...
- 一、MegaCli命令介绍
一.MegaCli命令介绍 MegaCli是一款管理维护硬件RAID软件,可以用来查看raid信息等MegaCli 的Media Error Count: 0 Other Error Count: 0 ...
- 12个Linux进程管理命令介绍(转)
12个Linux进程管理命令介绍 [日期:2015-06-02] 来源:Linux中国 作者:Linux [字体:大 中 小] 执行中的程序在称作进程.当程序以可执行文件存放在存储中,并且运行的 ...
- 2.SDK目录结构和adb工具及命令介绍
安卓开发学习笔记 1.安卓开发之环境搭建 2.SDK目录结构和adb工具及命令介绍 1.SDK目录介绍: ******************************** add-ons:Androi ...
- git各种命令介绍以及碰到的各种坑
一.各种命令介绍: git pull:从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:'git pull origin master'就是将origin这个版本库的代码更新到本地 ...
- tar.xz如何解压:linux和windows下tar.xz解压命令介绍
在linux下怎么解压和压缩tar.xz文件? (本文由www.169it.com搜集整理) 在linux下解压tar.xz文件步骤 1 2 # xz -d ***.tar.xz //先解压xz # ...
随机推荐
- 二分类算法的评价指标:准确率、精准率、召回率、混淆矩阵、AUC
评价指标是针对同样的数据,输入不同的算法,或者输入相同的算法但参数不同而给出这个算法或者参数好坏的定量指标. 以下为了方便讲解,都以二分类问题为前提进行介绍,其实多分类问题下这些概念都可以得到推广. ...
- 关于Tomcat重启和关闭后重启session变化
,当页面第一次访问,session的attribute还未赋值,为null 当页面第二次访问时,这时当前的session的attribute有值了! 到了本文章的点题时刻!! 如果我是直接点击serv ...
- [论文笔记] Improving Head Pose Estimation with a Combined Loss and Bounding Box Margin Adjustment
Improving Head Pose Estimation with a Combined Loss and Bounding Box Margin Adjustment 简介 本文提出了一种网络结 ...
- leetcode-easy-array-66 .plus one
mycode 主要在计算商和余数的时候一定要用还没更新的商和余数哦 class Solution(object): def plusOne(self, digits): ""&qu ...
- MySQL的explain分析sql语句
explain分析查询 使用 EXPLAIN 关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的.这可以帮你分析你的查询语句或是表结构的性能瓶颈.通过explain命 ...
- maven的配置及使用
Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具. Apache官网下载maven 解压缩,配置环境变量: path路径:E:\apache-ma ...
- JS中keyup, keypress, keydown以及oninput四个事件的区别
$email_input.onkeyup=function(event){ // console.log('event handle');//按方向键以及backspce esc有反应 长按字母键也没 ...
- RabbitMQ安装及其中遇到的问题解决方案
参考官方文档:https://www.rabbitmq.com/install-debian.html#apt 第一步: # import PackageCloud signing key wget ...
- python数据分析入门(一)----安装pandas
打算入坑, python数据分析 , 所以下载了 <利用python数据分析>的电子书, 影印版 , 14年出版的 , 现在有很多工具对不上号, 但是整体思想还是不变的 , 所以准备工作要 ...
- kettle入门大数据管理工具
研究 kettle 的使用 大佬博客:https://www.cnblogs.com/mq0036/p/9238646.html 国内镜像下载:http://mirror.bit.edu.cn/pen ...