MongoDB中不溜教程(1)简介与命令

MongoDB简介

MongoDB 是由C++语言编写的,基于分布式文件存储的开源数据库系统
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。
MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

以上是官方介绍,简单说:
MongoDB与mysql有类似的地方它们都是存储数据的系统,但是mysql是关系型数据,而MongoDB是NoSql数据库,MongoDB在面对海量数据时提供了分布式的存储方式,支持内存与磁盘两种方式,内部保存的数据格式类似JSON。

MongoDB下载安装

按照图解步骤一步一步操作即可,这里给出一些链接自行下载安装,不在本章节浪费篇幅介绍。
win平台: https://www.runoob.com/mongodb/mongodb-window-install.html
linux平台:https://www.runoob.com/mongodb/mongodb-linux-install.html
mac平台:https://www.runoob.com/mongodb/mongodb-osx-install.html

名词解释

介绍mongodb的具体操作之前我们先介绍一些它领域内的常用名词,与mysql对比着学习,如下表:

SQL术语mongodb术语描述
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfiled字段/域
indexindex索引
table joins表连接,mongodb不支持表连接
primary keyprimary key主键

下图也是表名他们之间的对应关系:

在这里插入图片描述

常用命令

下载安装配置完成,运行安装目录bin目录下的mongo.exe文件,是自带的支持js语法的交互式shell(命令行解释器)。接下来我们就在shell中使用一些命令来操作数据库,集合,文档等。一步步实现数据在MongoDB内的增删改查。

数据库命令

MongoDB内可以创建多个数据库,这些数据库磁盘中可以找到,默认就是我们创建的data/db文件夹。

创建数据库
>use dbname
switched to db dbname

dbname是自定义的数据库名,use 命令有两个功能:

  1. 当指定的dbname已存在表示切换数据库,与mysql中的use dbname类似。
  2. 指定的dbname不存在,则新建数据库。
查看当前数据库
>db
dbname
显示数据库列表
>show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
>

admin,config,local是默认自带的库,在这里我们并没有看到自己刚刚创建的库,这里我们需要向新建的库中插入集合之后才会显示在列表中。

切换至自创的数据库,体验插入数据:

>db.collectionname.insert({"name":"帅气如我"})

接下来我们再次执行show dbs命令便可以看到自己创建的数据库了。

>show dbs
admin    0.000GB
config    0.000GB
dbname 0.000GB
local      0.000GB
>
删除数据库

切换到想要删除的数据库下,执行以下命令:

>db.dropDatabase()

注意:命令区分大小写。

集合命令

集合,collection相当于sql中的表格,sql中如果创建表格首先需要涉及表结构,比如表字段,字段类型等,但是在nosql中不需要考虑这些,因为它的结构是不固定可扩展的。

创建集合

切换想要操作的数据库下执行:

>db.createCollection(collectionname, options)

此命令创建集合,collectionname是自定义集合名,options是可选的参数,表示针对集合设置的选项。
参数列表一览:

字段类型描述
capped布尔 (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。
autoIndexId布尔 (可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size数值 (可选)为固定集合指定一个最大值(以字节计)。如果 capped 为 true,也需要指定该字段。
max数值(可选)指定固定集合中包含文档的最大数量。

举例:创建固定集合 firstc,整个集合空间大小 102400KB, 文档最大个数为 10000 个并且会自动创建主键_id字段。

>db.createCollection("firstc", { capped : true, autoIndexId : true, size : 102400, max : 10000 } )

MongoDB还有另外一种创建集合的方式,直接执行插入文档命令,如果指定的集合文档不存在,则会创建集合。

>db.twoc.insert({"name":"帅气如我"})

此命令我们刚才在显示数据库列表时已经有所了解,其中twoc就是指定的集合名,twoc不存在则创建,insert中传入的是文档数据。

显示集合列表
>show collections

列出当前操作库下所有的集合。(相当于sql中列出当前数据库内所有的表格。)

删除集合
>db.collectionname.drop()

从数据库中移除指定的集合。

文档命令

文档,document,相对于sql中的一条记录,我们在mysql学习是知道,最常用的技术就是针对记录的增删改查,所以,文档操作也是我们学习的重点,当前我们简单的操作它的命令。
文档对应数据库概念中的记录,但是他们的形态很不一样,记录中是一个个字段的数据集,而文档的格式更像是json对象,但是我们叫它BSON,Binary JSON 的简称,BSON 是一种类似 JSON 的二进制形式的存储格式。

插入文档
>db.collection.insert({"name":"帅气如我","age":20,"fav":["跑步","游泳"]})

insert中传入的BSON就是一条文档, collectionname是我们的集合名,如果collectionname集合不在该数据库中,则自动创建并插入文档。
除了insert()以外还可以使用save(),save()既可以插入也可以更新。

MongoDB在3.2 版本后提供了新的语法可用于插入文档,也是官方推荐的:

  • db.collection.insertOne():向指定集合中插入一条文档数据
  • db.collection.insertMany():向指定集合中插入多条文档数据

举例批量插入:

>db.collection.insert({"name":"帅气如我","age":20,"fav":["跑步","游泳"]})

insertMany中传入的是一个数组,一次性插入多条数据。

可通过db.col.find()命令验证是否插入成功。

更新文档

MongoDB 提供了 update() 和 save() 两个方法来更新集合中的文档。

update()
update() 用于更新已存在的文档,语法:

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

参数说明:

参数名解释
queryupdate的查询条件,类似sql update查询内where后面的
updateupdate的对象和一些更新的操作符(如$set)等,也可以理解为sql update查询内set后面的
upsert可选,这个参数的意思是,如果不存在update的记录,是否插入新的文档,true为插入,默认是false,不插入
multi可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
writeConcern可选,抛出异常的级别。

举例:我们先像集合中插入几条文档,然后试着修改其数据。

>db.collection.insert({"name":"帅气如我","age":20,"fav":["跑步","游泳"]})
>db.collection.insert({"name":"帅气如你","age":30,"fav":["跑步","游泳"]})
>db.collection.insert({"name":"帅气如他","age":40,"fav":["跑步","游泳"]})

修改帅气如我的年龄为50:

db.collection.update({'name':'帅气如我'},{$set:{'age':50}},{multi:true})

解释:

  • 第一部分是条件,表示此次更新操作针对的是name为’帅气如我’的文档。
  • 第二部分是修改内容,把年龄域的值改成50。除了$set还有其他操作符,比如$inc,{$inc:{‘age’:50}则表示在原来的年龄基础上加50。
  • 第三部分是可选参数,multi:true表示所有叫’帅气如我’的文档都会被更新,如果不设置或者默认值false,只会修改符合条件的第一条文档。

条件部分支持有多种关系运算符,在接下来的查询命令中我们再详细介绍。

save()
save()也是拥有插入和更新两个动作,它是根据传入的文档的"_id"的值进行判断,如果有对应的文档存在则更新,若没有则新建,了解即可。

删除文档

删除已经存在的文档使用的是remove()函数,语法也比较简单:

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

参数说明:

参数名解释
query(可选)删除的文档的条件,无条件则全部删除
justOne(可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删除所有匹配条件的文档
query(可选)抛出异常的级别。

举例:删除名字叫"帅气如我"的文档中的第一条文档。

db.collection.remove({'name':'帅气如我'}, { justOne: 1 })

新版本提供了 deleteOne() 和 deleteMany()进行单挑删除和批量删除,可以理解为它们两个分别是justOne:true和justOne:false的简化写法。

执行删除命令后最好再执行db.repairDatabase()来释放磁盘空间。

查询文档

MongoDB提供find()函数来查询文档,语法如下:

db.collection.find(query, projection)

参数解释
query :可选,使用查询操作符指定查询条件
projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

db.col.find().pretty()

举例:

db.collection.find({'name':'帅气如我'})

这里需要{‘name’:‘帅气如我’}中的冒号相当于"=",但是在mongodb的命令中是没有">,<,<="等这些符号的,需要使用对应的格式。

操作格式范例
等于{:}db.col.find({“by”:“菜鸟教程”}).pretty()
小于{:{$lt:}}db.col.find({“by”:{$lt:50}}).pretty()
小于或等于{:{$lte:}}db.col.find({“by”:{$lte:50}}).pretty()
大于{:{$gt:}}db.col.find({“by”:{$gt:50}}).pretty()
大于或等于{:{$gte:}}db.col.find({“by”:{$gte:50}}).pretty()
不等于{:{$ne:}}db.col.find({“by”:{$ne:50}}).pretty()

结尾

关于MongoDb的命令我们就介绍到这里,因为在实际代码运用不同语言中都会有对应的api。我们的只需要对命令了解,实际开发以对应语言的Api为主,下一章节我们将介绍主要Python通过mongoengine操作MongoDB,它是一种ODM形式的三方库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值