mongodb入门(一)

前言

前面分享了一键搭建 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 的简单操作

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

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

  1. 创建集合(表)
    语法:db.createCollection(“集合名”);
// 创建集合 
db.createCollection("user");
// 查看所有的数据库
show dbs;

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

  1. 删除集合
    语法:db.getCollection(“集合名”).drop();
// 删除集合
db.getCollection("user_test").drop();
// 查看所有集合
show collections;

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

  1. 删除数据库
    语法: db.dropDatabase();
// 要删除某个数据库,需要先切换到该库,然后执行 db.dropDatabase();
use test;
db.dropDatabase();
二、数据增、删、改、查

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

use test;
db.createCollection("user");
  1. 插入数据
    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"}
    ]
);
  1. 查询数据
    语法: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 的进阶用法,我们下节见。

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不务正业的攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值