您的位置:首页 > 数据库 > Mongodb

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

2020-01-15 07:20 197 查看

MongoDB教程之简介与命令

  • 集合命令
  • 文档命令
  • 结尾
  • 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术语 描述
    database database 数据库
    table collection 数据库表/集合
    row document 数据记录行/文档
    column filed 字段/域
    index index 索引
    table joins 表连接,mongodb不支持表连接
    primary key primary 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>
    }
    )

    参数说明:

    参数名 解释
    query update的查询条件,类似sql update查询内where后面的
    update update的对象和一些更新的操作符(如$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形式的三方库。

    • 点赞
    • 收藏
    • 分享
    • 文章举报
    uuyu1 发布了13 篇原创文章 · 获赞 8 · 访问量 305 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: