前言

前面分享了一键搭建 mysql、redis、mongo 服务,因为笔者之前的工作中比较少接触到 mongo,以前也都是自己云服务器上搭个 demo 玩玩,但是因为实际工作中没用到,学完很快又忘记了。这次,趁着这个机会,找了一份 mongo 的资料,好好学习了一遍,发现其中还是有很多蛮有意思的东西,于是写下此文记录,以备不时之需。感兴趣的小伙伴也可以那它当个 mongo 入门案例,快速入门 mongodb。 温馨提示: 之前的脚本中,mongo 服务没有设置开机启动,因此可以先把 mongo 服务启动起来。

# 启动服务命令

docker start 容器名(服务名)

docker start docker-mongo

稍等片刻,实际就几秒钟,看到控制台输出一串字符串(容器id),证明mongo服务启动成功。

mysql vs mongodb

作为传统的关系型数据库之一,mysql 无疑是很多企业大小项目的选择之一,开源、标准的SQL数据语言、支持多种存储引擎,使得 mysql 的应用十分广泛。 而 mongodb 作为文档型数据库大代表,易扩展、动态储存、高性能的特点,在很多地方有着 mysql 不具有的优势,很多系统设计是二者相辅相成来构建一个稳定的系统。 今天,作为一个 mongo 的入门课,而且笔者的认知也有限,在此就不再讨论二者的优缺点,对此感兴趣的小伙伴可以自行查阅。接下来,我们开始进入 mongodb 的学习。 因为二者都是数据库,都有类似或相似的概念,这里对二者的常见概念做一个对比:

mysqlmongodb解释databasedatabase数据库 / 数据库tablecollection表 / 集合rowdocument记录 / 文档columnfield列 / 字段indexindex索引 / 索引primary keyObject Id主键 / Object Id 被自动设置为主键

mongodb 入门

一、数据库、集合创建删除

温馨提示:本文及余下关于 mongodb 内容是基于 mongodb 5.0.9 版本实验。

有了上面的基础概念,我们来学习 mongo 的简单操作

新建数据库 同 mysql 一样,mongodb 也需要先创建数据库,创建数据库的语法也很简单 use 数据库名,执行完成以后会创建(如果数据库不存在)并切换到该数据库。

use test;

查看所有数据库

show dbs;

但是执行完成以后你会发现,并没有我们创建的 test 数据库,这是怎么回事?

创建集合(表) 语法:db.createCollection(“集合名”);

// 创建集合

db.createCollection("user");

// 查看所有的数据库

show dbs;

这时可以发现,我们创建的 test 数据库已经存在了。

删除集合 语法:db.getCollection(“集合名”).drop();

// 删除集合

db.getCollection("user_test").drop();

// 查看所有集合

show collections;

此时发现,我们新建的集合已经不存在了。

删除数据库 语法: db.dropDatabase();

// 要删除某个数据库,需要先切换到该库,然后执行 db.dropDatabase();

use test;

db.dropDatabase();

二、数据增、删、改、查

为了以下演示方便,这里执行以下语句新建数据库 test 和集合 user。

use test;

db.createCollection("user");

插入数据 1.1 单条数据插入 语法:db.getCollection(“集合名”).insertOne({“key”:“value”…})

// 插入数据 {"name":"张三","age":18,"address":"西安"}

db.getCollection("user").insertOne({"name":"张三","age":18,"address":"西安"});

// 插入数据 {"name":"李四","age":20,"sex":"0"}

db.getCollection("user").insertOne({"name":"李四","age":20,"sex":"0"});

// 这里可以发现,我们第一条数据和第二条数据的字段 address 和 sex 是不一样的,这也是文档型数据库的灵活性之一。

// 我们可以再插入几条不一样的数据

db.getCollection("user").insertOne({"name":"王五","work":"临时工","sex":"0","intersts":["play","sing"]});

db.getCollection("user").insertOne({"name":"李雷","age":18,"address":"西安"});

虽然 mongodb 能够处理同一个字段的不同数据类型,也可以随意增减字段,但是,在设计数据库时,应尽量保证同一个字段使用同一种类型的数 并提前考虑好应该有哪些字段。

1.2 批量插入数据 语法:db.getCollection(“集合名”).insertManay([{“key”:“value”…}…]) 不同于单挑插入,批量插入的入参是一个数组。

db.getCollection("user").insertMany(

[

{"name":"赵六","age":30,"class":"一年级"},

{"name":"钱七","age":90,"work":"stay home"}

]

);

查询数据 语法:db.getCollection(“集合名”).find({查询条件},{输出字段控制}); 如果省略第2个参数,则MongoDB会返所有字段。用于输出字段控制字典的Key为各个字段名。其值只有两个 ——0或1。 如果值为0,则表示在全部字段中剔除值为0的这些字段并返回。 如果值为1,则表示只返回值为1的这些字段。 2.1 查询所有数据

db.getCollection("user").find({});

结果输出: 2.2 按条件查询

// 查询姓名为 李四 的人的信息

db.getCollection("user").findOne({"name":"李四"});

可以看到结果只有 李四 这一条。 范围查询

// 查询年龄大于等于30的用户信息

db.getCollection("user").find({"age":{"$gte":30}});

// 查询年龄小于30的用户信息

db.getCollection("user").find({"age":{"$lt":30}});

// 查询年龄不等于18的用户信息

db.getCollection("user").find({"age":{"$ne":18}});

组合条件查询

// 查询年龄不等于18且年龄小于等于20的用户

db.getCollection("user").find({"age":{"$ne":18,"$lte":20}});

2.3 返回字段限定

// 不返回工作和性别

db.getCollection("user").find({},{"work":0,"sex":0});

// 只返回年龄和名字

db.getCollection("user").find({},{"name":1,"age":1});

这里我们看到,我们只返回 age 和 name,但是 _id 也返回了,这是因为 _id 这个字段比较特殊,如果不需要返回需要显示指定

// 只返回 name age

db.getCollection("user").find({},{"name":1,"age":1,"_id":0});

3. 更新 更新也分为单条更新和更新多条,其语法一致, 更新语法:db.getCollection(“集合名”).updateOne({条件},{“KaTeX parse error: Expected 'EOF', got '}' at position 16: set":{需要更新的键值对}}̲); 或者 db.getCo…set”:{需要更新的键值对}});

db.getCollection("user").updateOne({"name":"王五"},{"$set":{"name":"王六"}});

查看数据,我们发现已经没有名字叫 王五 的用户了。

db.getCollection("user").updateMany({"age":18},{"$set":{"age":10,"address":"china","work":"会计"}});

我们发现,age 为 18 的用户信息已经被修改。 4. 删除 删除的语法也很简单,分为删除单条和批量删除 语法:db.getCollection(“集合名”).deleteOne({要删除的数据需要满足的条件}); db.getCollection(“集合名”).deleteMany({要删除的数据需要满足的条件});

db.getCollection("user").deleteOne({"age":18});

db.getCollection("user").deleteMany({"age":18});

好了,今天 mongo 的 crud基础语法就分享到这里了,感兴趣的小伙伴可以自己实践一下,毕竟 实践是检验真理的唯一标准,光说不练假把式。

下节将分享一些 mongodb 的进阶用法,我们下节见。

由于本人也是处于学习阶段,所有内容是看过资料以后自己实验得出,如有不妥之处还望各位批评指正,在下感激不尽。

精彩文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。