1、创建数据库

use testdb

2、创建集合

db.t_member.insert({name:"zhaomin",age:23})

3、查询

db.t_member.find()
db.t_member.findOne()

4、修改

db.t_member.update({name:"zhaomin"},{$set:{age:18}}) #不会影响其他属性列 ,主键冲突会报错
db.t_member.update({name:"zhaomin"},{$set:{age:18}},true)#第三个参数为true 则执行insertOrUpdate操作,查询出则更新,没查出则插入,或者
var p = db.t_member.findOne();
db.t_member.update(p,{name:"zhaomin1"}) #会删除其他的属性列

5、删除

db.t_member.remove({age:1}) #删除满足条件的第一条 只删除数据 不删除索引
#删除集合
db.t_member.drop();
#删除数据库
db.dropDatabase();

6、查看集合

show collections

7、查看数据库

show dbs

8、插入数据

db.t_member.insert() #不允许键值重复
db.t_member.save() #若键值重复,可改为插入操作

9、批量更新

db.t_member.update({name:"zhaomin"},{$set:{name:"zhanmin11"}},false,true);

批量操作需要和选择器同时使用,第一个false表示不执行insertOrUpdate操作,第二个true表示执行批量

10、更新器

$set : 指定一个键值对,若存在就进行修改,不存在则添加

$inc :只使用于数字类型,可以为指定键值对的数字类型进行加减操作:

db.t_member.update({name:"zhangsan"},{$inc:{age:2}})

执行结果是名字叫“zhangsan”的年龄加了2

$unset : 删除指定的键

db.t_member.update({name:"zhangsan"},{$unset:{age:1}})

$push : 数组键操作:1、如果存在指定的数组,则为其添加值;2、如果不存在指定的数组,则创建数组键,并添加值;3、如果指定的键不为数组类型,则报错;

$pushAll : 批量想数组键插入值

db.t_member.update({name:"zhangsan"},{$pushAll:{classes:["English","Math","Chinese"]}});

$addToSet : 当指定的数组中有这个值时,不插入,反之插入

db.t_member.update({name:"zhangsan"},{$addToSet:{classes:"English"}}); #则不会添加到数组里

$pop:删除指定数组的值,当value=1 删除最后一个值,当value=-1 删除第一个值

db.t_member.update({name:"zhangsan"},{$pop:{classes:1}}) #删除了最后一个值

$pull : 删除指定数组指定的值

db.persons.update({name:"zhangsan"},{$pull:{classes:"Chinese"}}) #$pullAll批量删除指定数组

db.t_member.update({name:"zhangsan"},{$pull:{classes:["Chinese"]}})
#若数组中有多个Chinese,则全删除

$ : 修改指定数组时,若数组有多个对象,但只想修改其中一些,则需要定位器:

db.t_member.update({"classes.type":"AA"},{$set:{"classes.$.sex":"male"}})

$addToSet 与 $each结合完成批量数组更新操作

db.t_member.update({name:"zhangsan"},{$set:{classes:{$each:["chinese","art"]}}})

11、runCommand函数和findAndModify函数

runCommand({
  findAndModify:"persons",
  query:{查询器},
  sort:{排序},
  update:{修改器},
  new:true 是否返回修改后的数据
});

runCommand函数可执行mongdb中的特殊函数

findAndModify就是特殊函数之一,用于返回执行返回update或remove后的文档

例如:

ps=db.runCommand({
  findAndModify:"persons",
  query:{name:"zhangsan"},
  update:{$set:{name:"lisi"}},
  new:true
})
ps.value

12、系统命令举例

1、查询服务器版本号和主机操作系统

db.runCommand({buildInfo:1})

2、查询执行集合的详细信息,大小,空间,索引等

db.runCommand({collStats:"persons"})

3、查看操作本集合最后一次错误信息

db.runCommand({getLastError:"persons"})

13、固定集合

1、特性

固定集合默认是没有索引的就算是_id也是没有索引的,由于不需分配新的空间他的插入速度非常快,固定集合的顺是确定的导致查询速度非常快,最适合就是日志管理

2、创建固定集合

创建一个新的固定集合要求大小是100个字节,可以存储文档10个

db.createCollection("mycoll",{size:100,capped:true,max:10})

把一个普通集合转换成固定集合

db.runCommand({convertToCapped:"persons",size:1000})

3、对固定集合反向排序,默认情况是插入的顺序排序

db.mycoll.find().sort({$natural:-1})

14、MongoDB高级查询

db.t_member.find({},{_id:0,name:1})

第一个空括号表示查询全部数据,第二个括号中值为0表示不返回,值为1表示返回,默认情况下若不指定主键,主键总是会被返回;

db.persons.find({条件},{指定键});

比较操作符:$lt: < $lte: <= $gt: > $gte: >= $ne: !=

14.1、查询条件

db.t_member.find({age:{$gte:25,$lte:27}},{_id:0,name:1,age:1})
#查询年龄大于等于25小于等于27的人
db.t_member.find({country:{$ne:"韩国"}},{_id:0,name:1,country:1})
#查询出所有国籍不是韩国的人的数学成绩

14.2、包含与不包含(仅针对于数组)

$in 或 $nin

db.t_member.find({country:{$in:["China","USA"]}},{_id:0,name:1:country:1})
#查询国籍是中国或美国的学生信息

14.3、$or查询

db.t_member.find({$or:[{c:{$gt:85}},{e:{$gt:90}}]},{_id:0,name:1,c:1,e:1}) #查询语文成绩大于85或者英语大于90的学生信息
db.t_member.update({country:"China"},{$set:{sex:"m"}},false,true)
#把中国国籍的学生上增加新的键sex
db.t_member.find({sex:{$in:[null]}},{_id:0,name:1,sex:1})
#查询出sex为null的人

14.4、正则表达式

db.t_member.find({name:/li/i},{_id:0,name:1})
#查询出名字中存在”li”的学生的信息

14.5、$not的使用

$not和$nin的区别是$not可以用在任何地方儿$nin是用到集合上的

db.t_member.find({name:{$not:/li/i}},{_id:0,name:1})
#查询出名字中不存在”li”的学生的信息

14.6、$all与index的使用

db.t_member.find({books:{$all:["JS","MONGODB"]}},{_id:0,name:1})
#查询喜欢看MONGOD和JS的学生
db.t_member.find({"books.1":"JAVA"},{_id:0,name:1,books:1})
#查询第二本书是JAVA的学习信息

14.7、$size的使用,不能与比较查询符同时使用

db.t_member.find({books:{$size:4}},{_id:0,name:1})
#查询出喜欢的书籍数量是4本的学生

14.8、查询出喜欢的书籍数量大于4本的学生本的学生

1、增加size键

db.t_member.update({},{$set:{size:4}},false,true)

2、添加书籍,同时更新size

db.t_member.update({name:"jim"},{$push:{books:"ORACL"},$inc:{size:1}})

3、查询大于3本的

db.t_member.find({size:{$gt:4}},{_id:0,name:1,size:1})

14.9、$slice操作符返回文档中指定数组的内部值

db.t_member.find({name:"jim"},{_id:0,name:1,books:{$slice:[1,3]}})
#查询出Jim书架中第2~4本书
db.t_member.find({name:"jim"},{_id:0,name:1,books:{$slice:-1}})
#查询出最后一本书

14.10、文档查询

查询出在K上过学且成绩为A的学生

1、绝对查询,顺序和键个数要完全符合

db.t_member.find({school:{school:"K","score":"A"}},{_id:0,name:1})

2、对象方式,但是会出错,多个条件可能会去多个对象查询

db.t_member.find({"school.school":"K","school.score":"A"},{_id:0,name:1})

3、正确做法单条条件组查询$elemMatch

db.t_member.find({school:{$elemMatch:{school:"K",score:"A"}},{_id:0,name:1})
db.t_member.find({age:{$gt:22},books:"C++",school:"K"},{_id:0,name:1,age:1,books:1,school:1})

14.11、分页与排序

1、limit返回指定条数 查询出persons文档中前5条数据:

db.t_member.find({},{_id:0,name:1}).limit(5)

2、指定数据跨度 查询出persons文档中第3条数据后的5条数据

db.t_member.find({},{_id:0,name:1}).limit(5).skip(3)

3、sort排序 1为正序,-1为倒序

db.t_member.find({},{_id:0,name:1,age:1}).limit(5).skip(3).sort({age:1})

注意:mongodb的key可以存不同类型的数据排序就也有优先级

最小值->null->数字->字符串->对象/文档->数组->二进制->对象ID->布尔->日期->时间戳->正则->最大值

14.12、游标

利用游标遍历查询数据

var persons = db.persons.find();
  while(persons.hasNext()){
  obj = persons.next();
  print(obj.name)
}

游标几个销毁条件

1).客户端发来信息叫他销毁

2).游标迭代完毕

3).默认游标超过10分钟没用也会别清除

14.13 聚合查询(Count 、Distinct、Group)

1、count 查询结果条数

db.persons.find({country:"USA"}).count()

2、Distinct 去重

请查询出persons中一共有多少个国家分别是什么

db.runCommand({distinct:"persons",key:"country"}).values
#key表示去重的键

3、group分组

db.runCommand({ group:{
  ns:"集合的名字",
  key:"分组键对象",
  initial:"初始化累加器",
  $reduce:"分解器",
  condition:"条件",
  finalize:"组完成器"
}})

分组首先会按照key进行分组,每组的 每一个文档全要执行$reduce的方法,他接收2个参数一个是组内本条记录,一个是累加器数据.

请查出persons中每个国家学生数学成绩最好的学生信息(必须在90以上)

db.runCommand({
  group:{
  ns:"persons",
  key:{"country":true},
  initial:{m:0},
  $reduce:function(doc,prev){
    if(doc.m>prev.m){
      prev.m = doc.m;
      prev.name = doc.m;
      prev.country = doc.country;
    }
  },
  condition:{m:{$gt:90}},
  finalize:function(prev){
    prev.m = prev.name+" comes from "+prev.country+" ,Math score is "+prev.m;
  }
 }
})

14.15 函数格式化分组键

如果集合中出现键Counrty和counTry同时存在

$keyf:function(doc){
  if(doc.country){
    return {country:doc.country}
  }
  return {country:doc.counTry}
}

15、MongoDB快照管理

快照后就会针对不变的集合进行游标运动了,看看使用方法.

db.persons.find({$query:{name:”Jim”},$snapshot:true})
#用快照则需要用高级查询

高级查询选项

选项 解释
$query
$orderby
$maxsan integer 最多扫描的文档数
$min doc查询开始
$max doc查询结束
$hint doc使用哪个索引
$explain boolean统计
$snapshot boolean 一致快照

15.1、查询点(70,180)最近的3个点

db.map.find({gis:{$near:[70,180]}},{_id:0,gis:1}).limit(3)

15.2、查询以点(50,50)和点(190,190)为对角线的正方形中的所有的点

db.map.find({gis:{$within:{$box:[[50,50],[190,190]]}}},{_id:0,gis:1})

15.3、查询出以圆心为(56,80)半径为50规则下的圆心面积中的点

db.map.find({gis:{$with:{$center:[[56,80],50]}}},{_id:0,gis:1})

16、MongoDB用户管理

16.1、添加用户

为testdb添加tom用户

use testdb
db.createUser({user:"tom",pwd:"123",roles:[{ role:"dbAdmin",db:"testdb"}]})

具体角色有

read:允许用户读取指定数据库

readWrite:允许用户读写指定数据库

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户

clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。

readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限

readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限

userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。

root:只在admin数据库中可用。超级账号,超级权限

16.2查看所有用户

db.system.users.find()

和用户管理相关的操作基本都要在admin数据库下运行,要先use admin;

如果在某个单一的数据库下,那只能对当前数据库的权限进行操作

16.3、用户删除操作

db.system.users.remove({user:"tom"});

16.4查看当前用户权限

db.runCommand({usersInfo:"tom",showPrivileges:true})

16.5修改密码

use testdb
db.changeUserPassword("tom", "123456")

1.6、启用用户

db.auth("tom","123")

16.7、安全检查 --auth

非testdb是不能操作数据库的,启用自己的用户才能访问
非admin数据库的用户不能使用数据库命令,admin数据库中的数据经过认证为管理员用户

本文为“Tom弹架构”原创,转载请注明出处。技术在于分享,我分享我快乐!

如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力。

原创不易,坚持很酷,都看到这里了,小伙伴记得点赞、收藏、在看,一键三连加关注!如果你觉得内容太干,可以分享转发给朋友滋润滋润!

MongoDB常用命令(2)的更多相关文章

  1. (转)mongodb常用命令脚本化-自动化运维

    mongodb常用命令脚本化-自动化运维 把一些运维中常用到的mongodb命令写成shell脚本,极大的方便了维护   1 设置副本集   #!/bin/bash#mongodb 进入client ...

  2. mongodb常用命令学习笔记

    mongodb常用命令学习笔记 创建数据库 use DATABASE_NAME eg: use users; 如果数据库不存在,则创建数据库,否则切换到指定数据库.要显示刚刚创建的数据库,需要向数据库 ...

  3. MongoDB常用命令

    本文整理了一年多以来我常用的MongoDB操作,涉及mongo-shell.pymongo,既有运维层面也有应用层面,内容有浅有深,这也就是我从零到熟练的历程. MongoDB的使用之前也分享过一篇, ...

  4. 【命令】MongoDB常用命令记录

    如果你想创建一个“myTest”的数据库,先运行use myTest命令,之后就做一些操作(如:db.createCollection('user')),这样就可以创建一个名叫“myTest”的数据库 ...

  5. mongoDB常用命令与安全加固

    一.介绍 MongoDB 是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系 ...

  6. mongodb常用命令【转】

    mongodb由 C++编写,其名字来自humongous这个单词的中间部分,从名字可见其野心所在就是海量数据的处理.关于它的一个最简洁描述为:scalable, high-performance, ...

  7. Mongodb常用命令介绍

    查看命令的方式: 1.在shell中运行db.listCommands() 2.在浏览器中访问管理员接口:http://ipaddress:28017/_commands 下面介绍在Mongodb中最 ...

  8. [转载]MongoDB 常用命令

    mongodb由C++编写,其名字来自humongous这个单词的中间部分,从名字可见其野心所在就是海量数据的处理.关于它的一个最简洁描述为:scalable, high-performance, o ...

  9. Windows下MongoDB常用命令

    以下命令中的启动与暂停服务命令需要使用管理员身份运行cmd.exe,其他命令需要先cd到Mongodb安装目录的bin目录. 1.启动服务:net start [Mongodb服务名].示例: net ...

  10. ubuntu下mongodb常用命令

    1. 启动脚本 #!/bin/bash mongod --dbpath /usr/local/mongodb/data1 chmod +x run-mongodb 2. 关闭数据库服务 官方文档说可以 ...

随机推荐

  1. Linux:sqlplus

    [oracle@hb shell_test]$ cat echo_time #!/bin/sh 一.最简单的调用sqlplus sqlplus -S "sys/unimas as sysdb ...

  2. 【Java】【学习】【监听器】Listener的学习的案例(窗体程序)

    JavaWeb 监听器listener 学习与简单应用 Java窗体程序使用监听器 效果:点击按钮,控制台出现文字 代码如下 import javax.swing.*; import java.awt ...

  3. [OpenGL ES 02]OpenGL ES渲染管线与着色器

    [OpenGL ES 02]OpenGL ES渲染管线与着色器 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循"署名-非商业用途-保持一致"创 ...

  4. python之异步编程

    一.异步编程概述 异步编程是一种并发编程的模式,其关注点是通过调度不同任务之间的执行和等待时间,通过减少处理器的闲置时间来达到减少整个程序的执行时间:异步编程跟同步编程模型最大的不同就是其任务的切换, ...

  5. [BUUCTF]REVERSE——[WUSTCTF2020]Cr0ssfun

    [WUSTCTF2020]Cr0ssfun 附件 步骤: 例行检查,无壳儿,64位程序,直接ida载入,检索程序里的字符串,根据提示跳转 看一下check()函数 内嵌了几个检查的函数,简单粗暴,整理 ...

  6. CF1003C Intense Heat 题解

    Content 给定一个长度为 \(n\) 的数列,求数列中所有长度 \(\geqslant k\) 的区间的最大平均值. 数据范围:\(1\leqslant k,n,a_i\leqslant 500 ...

  7. WebSocket协议理解-数据包格式解析

    WebSocket 的诞生 做客户端开发时,接触最多的应用层网络协议,就是 HTTP 协议,而今天介绍的 WebSocket,下层和 HTTP 一样也是基于 TCP 协议,这是一种轻量级网络通信协议, ...

  8. JS设置网站所有字体变为繁体字

    引入chinese.js var zh_default='n';var zh_choose='t';var zh_expires=7;var zh_class='zh_click';var zh_st ...

  9. nim_duilib(9)之RichEdit

    introduction 更多控件用法,请参考 here 和 源码. 本文的代码基于这里 RichEdit的更多用法,请参考源码中RichEdit.h提供的函数,RichEdit控件,可以定制为多种多 ...

  10. 【LeetCode】657. Judge Route Circle 解题报告

    [LeetCode]657. Judge Route Circle 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problems/judge-route- ...