🏠 首页 › 攻略 › MongoDB是什么?不写SQL也能存数据的文档数据库

MongoDB是什么?不写SQL也能存数据的文档数据库

MongoDB是一个文档型数据库,用JSON风格的文档代替表格存数据。schema灵活、水平扩展强,特别适合字段经常变、数据结构不太统一的应用。

MongoDB是什么?

写代码存数据,多数人选MySQL。但遇到一种场景头就大了:用户资料今天加个字段,下周又换种格式,表结构一改,整个应用跟着动。

MongoDB就是为这种场景准备的。它叫NoSQL数据库,存的是文档,文档长得像JSON:

{
  "_id": "abc123",
  "name": "张三",
  "tags": ["北京", "开发者"]
}

没有表、没有固定列。每条文档自带结构,想存什么存什么。

打个比方:MySQL像Excel,每一列必须对齐,加列得改整张表。MongoDB像一抽屉的便利贴,每张纸写什么自己定,要加内容随时写。

有什么用?

第一,字段随便加,不动schema。

内容平台存文章,有的带封面、有的带视频、有的带图集。用MySQL得拆一堆表,用MongoDB全塞进一个文档,查询一次拿完。

第二,横向扩展简单。

数据量大了,MongoDB把文档按key分到多台机器上,加机器就加容量。MySQL做分库分表要改应用代码,麻烦不少。

第三,和JavaScript生态天然契合。

前端后端都用JS,数据本身就是JSON风格,存进MongoDB不用再翻译一遍。

第四,适合数据本身就不规整的场景。

日志、物联网传感器读数、用户行为轨迹,这类数据每条结构都不同,硬塞进表格很别扭,文档数据库反而顺手。

它不擅长的呢? 多表强关联的查询、需要事务一致性的金融业务,还是MySQL或Postgres更稳。

怎么用?

MongoDB提供命令行工具、各种语言驱动,还有图形界面。

第一步:装实例。

本地开发用Docker一行命令拉起来:

docker run -d -p 27017:27017 mongo

第二步:建库写文档。

进MongoDB shell或连接驱动,创建集合(相当于表),往里插文档:

db.users.insertOne({name: "李四", age: 28})

第三步:查文档。

db.users.find({age: {$gt: 20}})

查询语法也是JSON风格,写起来比SQL直观。

实际项目里,Node.js + Express + MongoDB的组合(MERN里的M就是MongoDB)非常常见。Java、Python、Go都有官方驱动,API大同小异。

总结

MongoDB解决的是"数据太灵活,表格装不下"的问题。选它不选MySQL,关键看你的数据长什么样:

  • 字段经常变、结构不统一 → MongoDB更合适
  • 字段固定、强关联查询多 → 还是关系型数据库

没有哪种数据库通吃。想体验一下的话,Docker拉一个本地实例,十分钟就能跑通第一条查询。

你的项目里,有没有"表结构改一次、应用要跟着改半天"的痛?