MongoDB快速入门之常用命令

举报
烟雨江南 发表于 2021/06/11 10:54:05 2021/06/11
【摘要】 介绍了MongoDB如何快速学习入门,以及一些常使用到的命令。

在工作室听闻老师要安排班上学生做 MongoDB 实训,身为工作室灌水王的我,整理了份 MongoDB 的学习入门资料,下面记录一下入门时经常使用到的mongoDB语句。

一、 关于 MongoDB

1.1 MongoDB 简介

  1. MongoDB 是开源文档数据库,是一个基于分布式文件存储的非关系型数据库。
  2. MongoDB的基本概念是文档(document)、集合(collection)、数据库(database),文档是核心单元,像 {c:1} ; {s:“abcde”} 等,多个文档组成一个集合(相当于关系数据库的表)。
  3. 文档的数据结构和JSON基本一样,以 JSON 格式的文档保存数据。
  4. 所有存储在集合中的数据都是BSON格式,采用BSON存储文档数据。(BSON是一种类json的一种二进制形式的存储格式)

1.2 SQL 与 MongoDB 术语/概念对比

SQL MongoDB 解释
database database 数据库
table collection 数据库表 / 集合
row document 数据记录行 / 文档
column Field 数据字段 / 域
index Index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键

二、 安装 MongoDB

2.1 安装时相关命令

命令 解释
–bind_ip 0.0.0.0 本地ip
–logpath +路径 日志路径
–logappend 设置为追加日志
–dbpath +路径 数据库的路径
–port +端口 服务器的端口
–serviceName +名字 服务器的名字
–serviceDisplayname +名字 服务器的显示名字
–install 安装

在浏览器输入localhost:27017MongoDB的端口号是27017),
查看是否连接成功。
在这里插入图片描述

2.2 启动、关闭 MongoDB

命令 解释
net start MongoDB 启动MongoDB服务
net stop MongoDB 关闭MongoDB服务

也可以在任务管理器用鼠标操作 启动 、关闭 。

三、 使用 MongoDB

3.1 数据库的增删改查(CRUD)

创建数据库 (如果数据库名不存在,则创建;否则切换指定数据库)

use 数据库名

查看所有数据库

show dbs

查看当前数据库 (MongoDB默认的数据库为test,如果没有创建新的数据库,集合将存放在test数据库中)

db  //刚创建的数据库并不在数据库列表中,要显示它,需要向该数据库中插入数据

删除数据库 (删除当前数据库)

db.dropDatabase()

3.2 集合的操作

创建集合

db.createCollection('name',options)

//例如:db.createCollection('student')

查询数据库中所有集合

show collections

对集合重命名

db.旧名.renameCollection('new name')

删除集合

db.集合名.drop()
3.2.1 固定集合

特点:

  1. 可以声明集合容量的大小。
  2. 插入数据时,新文档会被插到队列末尾,当队列被占满时,最老的文档会被覆盖。
  3. 适用于想要自动删除属性的地方(比如日志、记录等只需保留最近时间内的应用情景)。
  4. 写入速度快(不建立索引;写入磁盘上的固定空间,所以不会因为其他集合一些随机性的写入操作而中断)。

注意:

  1. 创建后不能更改,只能删除或重建。
  2. 固定集合不能转为普通集合。
  3. 不能进行分片,不能删除文档(可以删除整个集合)。
  4. 可以进行更新(update),但更新不能让文档的size发生变化。

创建固定集合

db.createCollection("name",{capped,size})

/*例如:创建固定集合AAA,大小限制为1024个字节,文档数量限制为100。
      db.createCollection("AAA",{capped:true,size:1024,max:100}) 
*/

普通集合转固定集合 (没有限制文档数量的参数,即没有max的参数选项)

db.runCommand({"convertToCapped":"集合名","size":字节大小})

/*例如:将col集合转换为一个大小为1024字节的固定集合。
      db.runCommand({"convertToCapped":"col","size":1024}) 
*/

判断是否为固定集合 (判断后显示true或者false)

db.集合.isCapped()

查看集合属性

db.集合.stats()

3.3 插入文档

使用 insert()save() 向集合中插入文档(如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档)。

两者的区别:

  1. 当插入重复数据时:若新增数据的主键已经存在,insert会提示异常,不保存当前数据;save则会对当前已经存在的数据进行修改操作。
  2. 批操作时:insert可以一次性插入;而save需要一个个地插入。

插入单个文档

db.集合名.insert({需要插入的内容})

//例如:db.stuinfo.insert({_id:001,name:'alice',age:18})

插入单个文档(先定义再插入)

//定义一个值,再插入这个值

/*例如:s={_id:5,name:'张三',age:19}   
        db.stuinfo.insert(s) 
*/

插入多个文档

db.集合名.insert([{内容},{内容}])

//例如:db.foo.insert([{_id:3,name:'yu',age:18},{_id:4,name:'en',age:19}])
// 不要漏掉中括号

插入多条数据

//让其自加,再插入

 /*例如:for(var i=1;i<10;i++) 
           db.col.insert({count:i,test2:false,test5:true}) 
 */

3.4 更新文档

使用 update()save() 方法来更新集合中的文档。

两者的区别:

update save
用于更新已存在的文档 通过传入的文档来替换已有文档

update更新文档

db.集合.update({旧的},{$set:{新的}})

/*例如:db.stuinfo.update({name:'curry'},{$set:{name:'王五'}})
(以上语句只会修改第一条发现的文档)

如果要修改多条相同的文档,则需要设置 multi 参数为 true,如下:
    db.stuinfo.update({name:'curry'},{$set:{name:'王五'}},{multi:true})
*/

save更新文档

db.集合名.save({内容})

//例如:db.stuinfo.save({_id:2,name:'curry',age:20})

3.5 删除文档

使用 remove()deleteOne()deleteMany() 方法移除集合中的数据。

删除全部文档 (可以在括号内加条件)

db.集合名.deleteMany({})   或  db.集合名.remove({})
//例如:db.foo.deleteMany({'test5':true})

删除全部文档 (remove用法)

db.集合.remove(<query>,{justOne: <boolean>})

/*  参数query:可选,删除条件
    参数justOne:可选,如果设为true或1,则只删除一条;默认为false
例如:只删除年龄为18的一条数据
   db.foo.remove({'age':18},{justOne:1}) 
*/

删除一个文档

db.集合名.deleteOne({})
//例如:db.foo.deleteOne({age:18})

3.6 查询文档

查询文档 (可在括号内加查询条件)

db.集合名.find()

查询文档 (只查询第一条)

db.集合名.findOne()

查询文档 (格式化显示)

db.集合名.find().pretty()

多条件查询

//  在括号内加逗号分开条件
//例如:db.items.find({quantity:2,price:{$gte:4}})
3.6.1 文档查询条件的使用
符号 解释
等于
小于 $lt
小于或等于 $lte
大于 $gt
大于或等于 $gte
不等于 $ne

等于

db.集合名.find({‘属性’:条件})
//例如:db.items.find({price:20})

小于 ($lt)

db.集合名.find({‘属性’:{$lt:条件}})
//例如:db.items.find({price:{$lt:5}})

小于或等于 ($lte)

db.集合.find({‘属性’:{$lte:条件}})
//例如:db.items.find({price:{$lte:5}})

大于 ($gt)

db.集合名.find({‘属性’:{$gt:条件}})
//例如:db.items.find({price:{$gt:5}})

大于或等于 ($gte)

db.集合.find({‘属性’:{$gte:条件}})
//例如:db.items.find({price:{$gte:10}})

不等于 ($ne)

db.集合.find({‘属性’:{$ne:条件}})
//例如:db.items.find({price:{$ne:20}})
3.6.2 范围查询

使用 $in 或者 $nin 判断

db.集合.find({属性:{$in:[条件]}})

/*例如:查询年龄为18、19、20的学生。
      db.stuinfo.find({'age':{$in:[18,19,20]}})
*/
3.6.3 排序查询

sort的用法(参数1为升序,-1为降序)

db.集合.find().sort({属性:参数})

/*例如:按照年龄升序排序。
      db.stuinfo.find().sort({age:1})
  例如:按照年龄升序,主键降序排序。
      db.stuinfo.find().sort({age:1,_id:-1})
*/
3.6.4 使用 limit 和 skip 查询

查询指定数量的文档

db.集合.find().limit(数量)

/*例如:查询2条信息。 
      db.stuinfo.find().limit(2) 
*/ 

跳过指定数量的文档再查询

db.集合.find().skip(数量)

/*例如:跳过2条数据再查询    
      db.stuinfo.find().skip(2)
*/

以上可以同时使用

//例如:db.stu.find().skip(5).limit(4)
3.6.5 聚合查询

文档通过一个或多个阶段(stage)组成管道,对管道进行分组、过滤等功能。

db.集合名.aggregate()
符号 解释
$sum 总和
$avg 平均值
$min 最小值
$max 最大值
db.集合.aggregate([{$group:{_id:’id的名称’,’属性名’:{$sum:"$要统计的内容"}}}])
// 不要在要统计的内容前漏掉 $

使用聚合aggregate:

/*例如:统计price的总和  
      db.foo.aggregate([{$group:{_id:null,’总数’:{$sum:"$price"}}}])
  例如:通过产品类型分组,再统计卖出的数量
      db.foo.aggregate([{$group:{_id:"$mold",total:{$sum:"$BBBB"}}}])
*/
3.6.6 使用 or 语句进行条件查询

使用or语句(别漏掉中括号)

db.集合名.find({$or:[{key1: value1}, {key2:value2}]})

/*例如:查询AAA为10或价格大于等于5。
      db.foo.find({$or:[{AAA:10},{price:{$gte:5}}]})
*/
3.6.7 使用 and 和 or 联合查询
/*例如:查询AAA为“p003”且BBB为10或价格大于等于5的商品数据。
      db.items.find({AAA:'p003',$or:[{BBB:10},{price:{$gte:5}}]})
*/
3.6.8 使用管道查询
/*例如:将相同的产品类型进行分组,统计各个产品数量,然后获取最大的数量。
      db.items.aggregate([{$group:{_id:"$pnumber",total:{$sum:"$quantity"}}},{$group:{_id:null,max:{$max:"$total"}}}])
*/

3.7 统计集合中文档的数目

统计集合中文档的数目 (可以在括号内加条件)

db.集合名.count()

/*例如: db.foo.count()     
      db.foo.count({sex:'man'}) 
*/

3.8 消除重复

distinct的用法去重 (不要用大括号把去重字段也括进去)

db.集合.distinct(‘去重字段’,{条件})
//例如:  db.stuinfo.distinct('王五',{age:{$gt:29}})

另外,推荐下载Navicat来管理数据库,使用Navicat操作数据库比较友好。


文章来源: https://blog.csdn.net/qq_45069279 ,作者:苜苜的烂笔头,版权归原作者所有,如需转载,请联系作者。

原文链接:https://blog.csdn.net/qq_45069279/article/details/105754873

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。