分布式数据库NoSQL(二)——MongoDB 数据库基本操作

这篇具有很好参考价值的文章主要介绍了分布式数据库NoSQL(二)——MongoDB 数据库基本操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 json 的 bson 格式,因此可以存储比较复杂的数据类型。

MongoDB 最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

从目前阿里云 MongoDB 云数据库上的用户看,MongoDB 的应用已经渗透到各个领域,比如游戏、物流、电商、内容管理、社交、物联网、视频直播等,以下是几个实际的应用案例。

  • 游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新;

  • 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来;

  • 社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能;

  • 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析;

  • 视频直播,使用 MongoDB 存储用户信息、礼物信息等;

  • ……

本实训带你学习 MongoDB 的基础操作。

第1关:数据库创建

一、任务描述

本关任务:创建数据库。

二、相关知识

本关评测是在 Linux 环境下进行的,MongoDB 的安装与配置测评系统均已默认完成。

为了完成本关任务,你需要掌握: 1.如何连接数据库; 2.如何创建数据库。

连接数据库

MongoDB 安装完成后,可以通过 pgrep mongo -l 命令来查看是否已经启动。

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

在操作数据库之前,需要连接它,连接本地数据库服务器,输入命令:mongo,预期输出如图:

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

其中连接的警告可以不用管,只要最下方出现“ > ”符号,就说明连接成功。

创建数据库

连接上 MongoDB 之后就可以进行数据库的操作了,接下来我们创建一个名为 Testdb 的数据库,用命令:use Testdb 语句来创建(如果数据库不存在,则创建数据库,如果该数据库已存在,则切换到指定数据库)

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

查看所有数据库我们可以通过 show dbs 命令来查看

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

然而并没有我们刚创建的 Testdb 数据库。要想显示它,我们需要向数据库插入一些数据:db.Testdb.insert({_id:1,name:"王小明"}),如图所示:

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

现在,就可以看到我们创建的数据库 Testdb 了。

删除数据库

MongoDB 删除数据库需要先切换到该数据库中:use Testdb

然后再执行删除命令:db.dropDatabase()

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

编程要求

在右侧命令行中连接 MongoDB ,创建一个名为 mydb 的数据库,并插入数据:_id:1,name:"李小红"。

测试说明

操作完之后点击评测,平台会对你的创建的数据库和插入的数据进行测试,如果数据库创建成功且数据插入完成,平台会输出如图7所示的结果。

提示:如果右侧命令行无响应,是因为云端二十分钟会自动关闭容器,重新刷新页面即可解决问题,刷新之后环境会重置,所以你还需要重新创建数据库和表。

mongo                   #连接MongoDB

> use mydb
switched to db mydb
> db.mydb.insert({_id:1,name:"李小红"})
WriteResult({ "nInserted" : 1 })

分布式数据库NoSQL(二)——MongoDB 数据库基本操作分布式数据库NoSQL(二)——MongoDB 数据库基本操作

第2关:创建集合

一、任务描述

本关任务:在数据库中创建一个集合。

二、相关知识

MongoDB 数据库中的集合相当于 MySQL 数据库中的

为了完成本关任务,你需要掌握: 1.如何在指定的数据库创建集合; 2.查看集合; 3.删除集合。

在指定的数据库创建集合

先进入指定数据库 Testdb:

use Testdb

在Testdb数据库中创建创建固定集合test  整个集合空间大小512000KB,文档最大个数为1000个。

db.createCollection("test", { capped : true, autoIndexId : true, size : 512000, max : 1000 } )
  • capped :是一个布尔类型,true 时创建固定集合,必须指定 size。固定集合指有固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。默认为 false;

  • autoIndexId :也是一个布尔类型,如为 true,自动在_id 字段创建索引。默认为 false ;

  • size :为固定集合指定一个最大值(以字节 KB 计);

  • max :指定固定集合中包含文档的最大数量。

不过,和 MySQL 不同的是,在 MongoDB 中,你不一定需要先创建集合。当你插入一些文档时,MongoDB 会自动创建集合。

创建集合命令(推荐)db.集合名.insert()(注意:一条数据用大括号“ {} ”括起来,多条数据用“ [] ”将所有数据括起来)。

db.test.insert([{"name" : "王小明","sex":"男"},{"name" : "李小红","sex":"女"}])

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

默认 id

MongoDB 中存储的文档 必须 有一个_id键(如果我们插入数据的时候未指定_id,系统会自动生成一个默认的 id )。这个键的值可以是任何类型的,默认是个 ObjectId 对象。在一个集合里面,每个文档都有唯一的_id值,来确保集合里面每个文档都能被唯一标识。如果有两个集合的话,两个集合可以都有一个值为123的_id键,但是每个集合里面只能有一个_id是123的文档。

查询集合

查询集合命令:db.集合名.find()。由此我们也能看到 MongoDB 默认创建的_id,如图所示;

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

删除集合

删除集合命令:db.集合名.drop()

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

编程要求

在右侧命令行中操作,创建数据库 Testdb2,创建集合 t_stu ,内容如图所示:

分布式数据库NoSQL(二)——MongoDB 数据库基本操作测试说明

操作完之后点击评测,平台会对你的创建的集合进行测试,如果集合创建成功,平台会输出如图所示的结果。

分布式数据库NoSQL(二)——MongoDB 数据库基本操作提示:如果右侧命令行无响应,是因为云端二十分钟会自动关闭容器,重新刷新页面即可解决问题,刷新之后环境会重置,所以你还需要重新创建数据库和表。

操作如下:(">" 之后的才需要输入)

mongo                #进入MongoDB
> use Testdb2
switched to db Testdb2
> db.t_stu.insert([{"_id" : 1,"name" : "小明","sex" : "男","hobbies" : ["乒乓球","羽毛球"]},{"_id" : 2,"name" : "小红","sex" : "女","hobbies" : [ "画画","唱歌"]}])
BulkWriteResult({
        "writeErrors" : [
                {
                        "index" : 0,
                        "code" : 11000,
                        "errmsg" : "E11000 duplicate key error collection: Testdb2.t_stu index: _id_ dup key: { : 1.0 }",
                        "op" : {
                                "_id" : 1,
                                "name" : "小明",
                                "sex" : "男",
                                "hobbies" : [
                                        "乒乓球",
                                        "羽毛球"
                                ]
                        }
                }
        ],
        "writeConcernErrors" : [ ],
        "nInserted" : 0,
        "nUpserted" : 0,
        "nMatched" : 0,
        "nModified" : 0,
        "nRemoved" : 0,
        "upserted" : [ ]
})
> db.t_stu.find()
{ "_id" : 1, "name" : "小明", "sex" : "男", "hobbies" : [ "乒乓球", "羽毛球" ] }
{ "_id" : 2, "name" : "小红", "sex" : "女", "hobbies" : [ "画画", "唱歌" ] }

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

第3关:文档操作一

一、任务描述

本关任务:文档数据在 MongoDB 中的插入和更新。

二、相关知识

本章节中我们将向大家介绍文档数据在 MongoDB 中的基本操作。

文档的数据结构和 JSON 基本一样,所有存储在集合中的数据都是 BSON 格式。BSON 是一种类 JSON 的一种二进制形式的存储格式,简称: Binary JSON 。

为了完成本关任务,你需要掌握: 1.插入文档命令; 2.更新文档的两种方法。

插入文档

插入文档命令:db.集合名.insert(文档)。 该命令前面两关我们也有用到。除了前两关的用法以外,我们还可以将数据定义为一个变量,如下所示:

document=({_id:1,       
        name: '王小明',
        sex: '男',
        hobbies: ['乒乓球','羽毛球'],
        birthday: '1996-02-14'
        });

然后执行插入操作:

db.person.insert(document)person 是集合名,如果该集合不在该数据库中,MongoDB 会自动创建该集合并插入文档,查看 person 集合,如图所示:

更新文档

更新文档主要会用到 update() 方法和 save() 方法。

update() 方法

我们先把 document 插入到集合 person2;

db.person2.insert(document)

由于信息有误,上面 birthday 的格式错了,该怎么去修改这个字段的值呢?这时就要用到 update() 方法了。

用 update() 方法来更新 person2 的数据,把王小明的出生日期替换成1996,命令如下:

db.person2.update({birthday:"1996-02-14"},{$set:{birthday:"1996"}})

更新后如图所示( pretty() 方法的作用是使文档整齐的输出):

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

可以发现:

  • update() 有两个参数,都是对象,中间用逗号“ ,”间隔;
  • 第一个参数表示需要修改的值;
  • 第二个参数用 $set 操作符指向更新后的值。

save() 方法

save() 方法通过传入的文档替换已有文档

我们先把 document 插入到集合 person3 中;

db.person3.insert(document)

如果这时我们把一个人的数据都弄错了,怎么办呢?这时用 save() 方法来更新修改一下 person3 的数据就比较方便。

用 save() 方法把王小明的数据修改为李小红的数据:

db.person3.save({"_id" :1,name" : "李小红","sex" : "女","hobbies" : ["画画","唱歌","跳舞"],"birthday" : "1996-06-14"})

注:如果 save() 法也指定_id,则对文档进行更新未指定_id则会执行插入功能,MongoDB 默认自动生成一个不重复的_id

总结:

  • update() 方法仅适用于修改某条数据中的某个键值;

  • save() 方法适用于修改整条数据。

编程要求

现在有文档数据如下:

_id 1
name 张小华
sex
phone 12356986594
hobbies 打篮球,踢足球,唱歌
  • 使用 Testdb3 数据库,把它赋值给变量 document ,插入到集合 stu1 、stu2 、stu3 中;

  • 然后对集合 stu2 使用 update() 方法,把 phone 的值更新为18356971462;

  • 对集合 stu3 使用 save() 方法,用下面张晓晓的信息替换掉张小华的信息。

_id 1
name 张晓晓
sex
phone 12365498704
hobbies 跳舞,羽毛球,唱歌

测试说明

操作完之后点击评测,平台会对你的操作进行测试,如果操作正确,预期输出如图3所示的结果:

提示 : 如果右侧命令行无响应,是因为云端二十分钟会自动关闭容器,重新刷新页面即可解决问题,刷新之后环境会重置,所以你还需要重新创建数据库和表。

> use Testdb3
switched to db Testdb3
> document=({"_id" : 1,"name" : "张小华","sex" : "男","phone" : '12356986594',"hobbies" : [ "打篮球","踢足球","唱歌" ]})
{
        "_id" : 1,
        "name" : "张小华",
        "sex" : "男",
        "phone" : "12356986594",
        "hobbies" : [
                "打篮球",
                "踢足球",
                "唱歌"
        ]
}
> db.stu1.insert(document)
WriteResult({ "nInserted" : 1 })
> db.stu2.insert(document)
WriteResult({ "nInserted" : 1 })
> db.stu3.insert(document)
WriteResult({ "nInserted" : 1 })
> db.stu2.update({"phone" : '12356986594'},{$set:{"phone" : '18356971462'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.stu3.save({"_id" : 1,"name" : "张晓晓","sex" : "女","phone" : '12365498704',"hobbies" : [ "跳舞","羽毛球","唱歌" ]})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

分布式数据库NoSQL(二)——MongoDB 数据库基本操作分布式数据库NoSQL(二)——MongoDB 数据库基本操作

第4关:文档操作二 

一、任务描述

本关任务:文档数据在 MongoDB 中的查询和删除。

二、相关知识

为了完成本关任务,你需要掌握:

  1. 查询文档命令;
  2. 删除文档命令。

查询文档

我们先插入文档到集合 stu1 :

document=([{name:'张小华',sex:'男',age:20,phone:'12356986594',hobbies:['打篮球','踢足球','唱歌']},
{name:'李小红',sex:'女',age:18,phone:'12355487536',hobbies:['跳舞','唱歌']}])
db.stu1.insert(document)

然后查看 stu1 ,命令和结果如图所示(因为我们没有设置_id,所以 MongoDB 会默认生成):

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

上述显示的文档格式不够整齐,我们可以使用 pretty() 方法,使输出更整齐,如图所示:

 分布式数据库NoSQL(二)——MongoDB 数据库基本操作

条件查询

操作 格式 范例 关系数据库中类似的语句
等于 {<key>:<value>} db.stu1.find({"name":"李小红"}).pretty() where name = '李小红'
小于 {<key>:{$lt:<value>}} db.stu1.find({"age":{$lt:18}}).pretty() where age < 18
小于或等于 {<key>:{$lte:<value>}} db.stu1.find({"age":{$lte:18}}).pretty() where age <= 18
大于 {<key>:{$gt:<value>}} db.stu1.find({"age":{$gt:18}}).pretty() where age > 18
大于或等于 {<key>:{$gte:<value>}} db.stu1.find({"age":{$gte:18}}).pretty() where age >= 18
不等于 {<key>:{$ne:<value>}} db.stu1.find({"age":{$ne:18}}).pretty() where age != 18

现在我们来查找一下 age 大于18岁的数据,命令和效果如图所示:

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

AND 条件

find() 方法可以传入多个键 (key),每个键 (key) 以逗号隔开,即常规 SQL 的 AND 条件。如查询集合 stu1 中年龄为20岁的男性信息:

db.stu1.find({"age":20, "sex":"男"}).pretty()

查询结果如图所示:

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

删除文档数据

删除指定的数据:

db.stu1.remove({'age':20})           //删除年龄为20的数据

查看该集合的内容,如果只剩下如图所示的信息,说明数据删除成功:

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

删除全部数据(集合并不会删除):

db.remove({})

查看该集合的内容,如果如图6所示,无显示或者显示为空,说明数据全部删除:

分布式数据库NoSQL(二)——MongoDB 数据库基本操作

编程要求

现有文档数据如下:

_id 1
name 西西
sex
age 23
national 汉族
_id 2
name 东东
sex
age 20
national 苗族
_id 3
name 北北
sex
age 19
national 汉族
_id 4
name 南南
sex
age 15
national 傣族
  • 把上述数据赋值给变量 document (一条命令),插入到集合 stu1 、stu2;

  • 执行查询命令,查找集合 stu1 中年龄大于等于15岁的女生;

  • 执行查询命令,查找集合 stu1 中苗族人;

  • 执行查询命令,查找集合 stu1 中年龄小于20岁的男生;

  • 执行删除命令,删除集合 stu2 的所有数据。

上述操作共有六条命令,请按要求填入右侧代码栏 Begin-End 中,每条命令以英文分号“ ;”号隔开(由于测试需要,请在“ $ ” 前加 “ \ ” (转义符),平时在命令窗口练习不需要加“ \ ”)。

测试说明

操作完之后点击评测,平台会对你的操作测试,如果操作成功,平台会输出如 测试集1所示的结果,否则会显示报错信息。

提示 : 如果右侧命令行无响应,是因为云端二十分钟会自动关闭容器,重新刷新页面即可解决问题,刷新之后环境会重置,所以你还需要重新创建数据库和表。

#########begin#########
echo "
document=([
    {_id:1,name:'西西',sex:'女',age:23,national:'汉族'},
    {_id:2,name:'东东',sex:'男',age:20,national:'苗族'},
    {_id:3,name:'北北',sex:'男',age:19,national:'汉族'},
    {_id:4,name:'南南',sex:'女',age:15,national:'傣族'}]);
db.stu1.insert(document);
db.stu2.insert(document);
db.stu1.find({'age':{\$gte:15},'sex':'女'});
db.stu1.find({'national':'苗族'});
db.stu1.find({'age':{\$lt:20},'sex':'男'});
db.stu2.remove({});
"
#########end#########

分布式数据库NoSQL(二)——MongoDB 数据库基本操作文章来源地址https://www.toymoban.com/news/detail-457642.html

到了这里,关于分布式数据库NoSQL(二)——MongoDB 数据库基本操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 分析型数据库:分布式分析型数据库

    分析型数据库的另外一个发展方向就是以分布式技术来代替MPP的并行计算,一方面分布式技术比MPP有更好的可扩展性,对底层的异构软硬件支持度更好,可以解决MPP数据库的几个关键架构问题。本文介绍分布式分析型数据库。 — 背景介绍— 目前在分布式分析型数据库领域,

    2023年04月14日
    浏览(46)
  • 分布式数据库HBase

    HBase是一个高可靠、高性能、 面向列 、可伸缩的分布式数据库,是谷歌BigTable的开源实现,主要用来存储非结构化和把结构化的松散数据。 HBase的目标是处理非常庞大的表,可以通过水平扩展的方式,利用 廉价计算机集群 处理由超过10亿行数据和数百万列元素组成的数据表。

    2024年02月09日
    浏览(46)
  • 【大数据】分布式数据库HBase

    目录 1.概述 1.1.前言 1.2.数据模型 1.3.列式存储的优势 2.实现原理 2.1.region 2.2.LSM树 2.3.完整读写过程 2.4.master的作用 本文式作者大数据系列专栏中的一篇文章,按照专栏来阅读,循序渐进能更好的理解,专栏地址: https://blog.csdn.net/joker_zjn/category_12631789.html?spm=1001.2014.3001.5482 当

    2024年04月27日
    浏览(32)
  • 分布式数据库-事务一致性

    version: v-2023060601 author: 路__ 分布式数据库的“强一致性”应该包含两个方面: serializability(串行) and linearizability(线性一致) ,上述图为“Highly Available Transactions: Virtues and Limitations”论文中对于一致性模型的介绍。图中箭头表示一致性模型之间的关系。对于异步网络上的分

    2024年02月08日
    浏览(39)
  • 聊聊分布式 SQL 数据库Doris(二)

    Doris中,Leader节点与非Leader节点和Observer节点之间的元数据高可用和一致性,是通过bdbje(全称:Oracle Berkeley DB Java Edition)的一致性和高可用实现的。 元数据与同步流程 元数据主要存储四类数据: 用户数据信息. 包括数据库, 表的schema, 分片信息等 各类作业信息. 如导入作业, clo

    2024年02月05日
    浏览(52)
  • 聊聊分布式 SQL 数据库Doris(四)

    FE层的架构都能在网上找到说明. 但BE层的架构模式、一致性保障、与FE层之间的请求逻辑,数据传输逻辑等,我个人暂时没有找到相应的博客说明这些的。当然这些是我个人在学习与使用Doris过程中,对内部交互逻辑与实现感兴趣才有这些疑问. 还好现在有GPT这类大模型,有了

    2024年02月05日
    浏览(42)
  • 11.云原生分布式数据库之TIDB

    云原生专栏大纲 从后端视角、运维视角和基础架构视角来看,使用 TiDB 作为数据库系统可以获得分布式架构、高可用性、强一致性、事务支持、水平扩展、高性能、简化运维、灵活的扩展和配置、集成的监控和告警等优势。这些优势使得 TiDB 成为处理大规模数据和高并发请求

    2024年02月01日
    浏览(55)
  • 聊聊分布式 SQL 数据库Doris(五)

    阅读 Doris SQL 原理解析,总结下Doris中SQL解析流程: 词法识别:解析原始SQL文本,拆分token 语法识别:将token转换成AST 单机逻辑查询计划:将AST经过一系列的优化(比如,谓词下推等)成查询计划,提高执行性能与效率。 分布式逻辑查询计划:根据分布式环境(数据分布信息

    2024年02月05日
    浏览(43)
  • 聊聊分布式 SQL 数据库Doris(三)

    在 Doris 的存储引擎规则: 表的数据是以分区为单位存储的,不指定分区创建时,默认就一个分区. 用户数据首先被划分成若干个分区(Partition),划分的规则通常是按照用户指定的分区列进行范围划分,比如按时间划分。 在每个分区内,数据被进一步的按照Hash的方式分桶,分

    2024年02月05日
    浏览(42)
  • 聊聊分布式 SQL 数据库Doris(八)

    密集索引:文件中的每个搜索码值都对应一个索引值,就是叶子节点保存了整行. 稀疏索引:文件只为索引码的某些值建立索引项. 稀疏索引的创建过程包括将集合中的元素分段,并给每个分段中的最小元素创建索引。在搜索时,先定位到第一个大于搜索值的索引的前一个索引

    2024年02月05日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包