当前位置:首页 > 问答 > 正文

一键搞定MongoDB数据库,新手也能秒懂新建命令操作教程

咱们得知道MongoDB是个啥,你可以把它想象成一个超级灵活的大仓库,和我们平时用的那种需要提前规划好每个货架放什么(比如Excel表格,必须定好列)的仓库不同,MongoDB这个仓库里用的是一种叫“文档”的箱子来装东西,每个文档就像是一个自带的包裹,里面想装什么就装什么,每个包裹的内容还可以完全不一样,非常自由,这个“文档”格式,其实就是我们常听的JSON(或者叫BSON,是JSON的二进制形式),看起来就像是一堆大括号包裹着的键值对,非常直观。

来源参考:MongoDB官方文档中对文档数据模型的基本定义。

要操作这个仓库,我们需要一个工具,叫做MongoDB Shell,你可以把它理解成进入仓库大门的遥控器或者命令行界面,安装好MongoDB之后,在终端(Windows是CMD或PowerShell,Mac是Terminal)里输入 mongosh 命令,就能连接上本地的MongoDB仓库了,看到光标变成 > 符号,就说明你成功进来了,可以开始发号施令了。

来源参考:MongoDB官方入门指南中连接MongoDB实例的部分。

进来之后,第一件事是看看有哪些仓库(数据库),命令是 show dbs,这个命令会列出所有已经存在并且里面有点东西的数据库,你会发现有几个自带的,比如admin, local,先不用管它们。

假设我们要为自己创建一个新的数据库,比如叫 myFirstDatabase,在MongoDB里,创建一个新数据库的魔法咒语非常有意思:你不需要特意去“创建”它,你只需要“使用”它就行了。 命令是 use 数据库名字,我们输入:

use myFirstDatabase

执行后,它会提示“switched to db myFirstDatabase”,意思是已经切换到你这个新数据库了,但你现在再用 show dbs 命令,会发现这个新数据库并不在列表里,为什么呢?因为MongoDB很懒,它觉得一个空数据库没有存在的必要,只有当我们在数据库里真正存放了东西(即插入了数据),它才会被正式创建出来。

一键搞定MongoDB数据库,新手也能秒懂新建命令操作教程

来源参考:MongoDB官方文档中关于创建和切换数据库的说明,其中明确提到“如果数据库不存在,MongoDB会在您第一次存储该数据库的数据时创建该数据库。”

数据库就像一个大楼,大楼里面有很多房间,这些房间在MongoDB里叫做“集合”,集合就是一组文档的集合,你可以理解为是一类东西都放在同一个房间里,我们的数据库是“我的公司”,那么集合可以是“员工信息”、“产品列表”、“订单记录”等等。

我们创建一个集合,和创建数据库的逻辑类似,你也不需要特意去创建一个空集合。最直接的方式就是直接往一个不存在的集合里插入数据,这个集合就会被自动创建出来。 这是MongoDB新手最容易上手的一点:不用先定义表结构!

我们来插入第一条数据吧,假设我们要在“员工信息”这个集合里,记录一个叫小明的员工,命令是 db.集合名字.insertOne(),括号里面,我们就用JSON格式来写小明的信息。

db.employee.insertOne({
    name: "小明",
    age: 28,
    department: "技术部",
    hobbies: ["打篮球", "看电影"],
    joinDate: new Date("2023-01-15")
})

我们来拆解一下这个命令:

一键搞定MongoDB数据库,新手也能秒懂新建命令操作教程

  • db:代表当前使用的数据库,也就是我们刚才的 myFirstDatabase
  • employee:这是我们想要操作的集合的名字,因为之前没有这个集合,MongoDB会为我们自动创建它。
  • insertOne():顾名思义,就是插入一条文档。
  • 大括号 里面就是文档内容,也就是小明的个人信息,这里用了字符串(name, department)、数字(age)、数组(hobbies,表示他有多项爱好)甚至日期(joinDate)等多种类型。

执行这个命令后,MongoDB会返回一个结果,告诉你插入成功,并且自动为这条数据生成了一个唯一的 _id,就像每个人的身份证号一样,是系统自动分配的,保证不会重复。

来源参考:MongoDB CRUD操作文档中关于insertOne()方法的详细解释和示例。

我们的数据库和集合都已经因为这条数据而真实存在了,你可以再输入 show dbs 看看,myFirstDatabase 肯定出现在列表里了,输入 show collections 命令,可以看到当前数据库下的所有集合,你也会看到 employee 这个集合。

光插入还不够,我们得看看里面有什么,查询命令是 find()

  • 查看 employee 集合里的所有文档: db.employee.find()
  • 为了让显示的结果更整齐易读,可以在后面加上 .pretty()db.employee.find().pretty()

如果你只想找特定的人,比如找名字是小明的员工,可以在 find() 里加上条件,就像这样: db.employee.find({name: "小明"})

一键搞定MongoDB数据库,新手也能秒懂新建命令操作教程

好了,现在我们再给技术部招聘一位新员工小红,这次我们学一下一次性插入多条数据,命令是 insertMany()

db.employee.insertMany([
    {
        name: "小红",
        age: 25,
        department: "技术部",
        hobbies: ["旅游", "读书"],
        joinDate: new Date("2023-08-20")
    },
    {
        name: "小刚",
        age: 30,
        department: "市场部",
        hobbies: ["摄影"],
        joinDate: new Date("2022-05-10")
    }
])

注意,这次数据是放在一个方括号 [] 里的,表示这是一个数组,里面包含了两条文档。

如果你不小心写错了数据想修改,可以用 updateOne() 命令,比如要把小明的年龄改成29岁:

db.employee.updateOne(
    {name: "小明"},   // 第一步:找到谁?名字是小明的文档。
    {$set: {age: 29}} // 第二步:改什么?设置age字段的值为29。
)

如果想删除数据,命令是 deleteOne(),比如小刚离职了,要删除他的记录:

db.employee.deleteOne({name: "小刚"}) // 找到名字是小刚的文档,然后删除它。

来源参考:上述insertMany(), updateOne(), deleteOne()等命令均可在MongoDB官方CRUD操作文档中找到对应章节。

作为新手,你只需要记住几个最核心的命令,就能玩转MongoDB的基本操作了:

  1. use 数据库名:切换/创建数据库。
  2. db.集合名.insertOne({...}):插入一条数据,并自动创建集合。
  3. db.集合名.find():查询所有数据。
  4. db.集合名.updateOne({谁}, {改什么}):更新一条数据。
  5. db.集合名.deleteOne({谁}):删除一条数据。

记住MongoDB的精髓:用到哪创建到哪,不用事先画好图纸(定义模式),非常灵活,希望这个教程能让你感觉MongoDB的命令一点都不难!