文档数据库和关系型数据库的骂战,像极了iOS和安卓用户的互撕——两边都觉得对方是异端。MongoDB在2010年代被喷得最惨:没schema、没ACID、没join,这三宗罪让DBA们提起它就摇头。

问题是,这些指控早就过期了。MongoDB 4.0在2018年引入多文档ACID事务,schema验证成了标配,聚合管道能做的事情比大多数SQL子查询更花哨。但很多人还在用2009年的印象打分,就像拿着iPhone 4的测评骂iPhone 15续航差。

最顽固的误解是"文档数据库不适合复杂查询"。实际上,MongoDB的聚合框架支持$lookup(就是join)、$graphLookup(图遍历)、甚至全文搜索和向量检索。一位用了8年PostgreSQL的工程师在Hacker News吐槽:「我花了两周把报表系统迁到MongoDB,查询速度反而快了3倍,之前是被偏见耽误了。」

另一个坑是"schema-free等于无政府主义"。早期团队确实滥用灵活性,字段类型像开盲盒。但现在Schema Validation、JSON Schema、Change Streams这套组合拳,既能保持迭代速度,又能在写入时拦住脏数据。灵活和控制不是单选题,是滑动条。

选型这件事,本质上是在选约束条件。SQL给你严格的语法和成熟的生态,MongoDB给的是水平扩展的默认选项和嵌套文档的直觉建模。还在用"有没有join"当决策标准,就像买车只看有没有CD机——不是不能看,但优先级排错了。

有个细节很有意思:MongoDB的Atlas云服务里,最活跃的查询优化建议不是"加索引",而是"你的数据模型可以嵌套得更激进一点"。用了15年关系型脑子的工程师,第一次写嵌套数组时手会抖,但读性能是真的香。