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拉一个本地实例,十分钟就能跑通第一条查询。
你的项目里,有没有"表结构改一次、应用要跟着改半天"的痛?