Tool Showdown

Postgres vs MongoDB: When MongoDB Actually Wins

Postgres vs MongoDB in 2026 comes down to one number: 4KB. Postgres hit 55.6% developer usage while MongoDB was the only major database to shrink. Here is why.

By Ricardo de Jong 8 min read 9:06 video

Watch the explainer

MongoDB was the only major database that shrank last year. Every other one grew. At this point the jokes write themselves, and developers have landed on a verdict smug enough to fit on a sticker: just use Postgres. They are mostly right. Postgres won, and it deserved to.

I am going to defend MongoDB anyway. Not because the crowd is wrong, but because buried under the dogpile there is one narrow lane where reaching for Postgres is the real mistake, and it comes down to a single number. This guide covers that number, the workloads where MongoDB wins outright, and why half the “just use Postgres” crowd would fold the second you asked them why.

Postgres vs MongoDB: the short answer

For almost every new app in 2026, Postgres is the stronger default. It stores relational data and JSON, runs vector search through pgvector, does full-text search, and beats anything MongoDB ships for maps through PostGIS. One database, one connection string, one thing to back up and debug. That breadth is why it topped the 2025 Stack Overflow Developer Survey at 55.6% usage among professional developers, up from 48.7% the year before.

MongoDB is not dead, and it is not a mistake everywhere. It earns its place in a few specific workloads that we will get to. But the deciding factor is the shape of your data, not the SQL-versus-NoSQL label that everyone still argues about. If your data is a set of rows that relate to each other, Postgres fits. If each record is a self-contained document you read and write whole, MongoDB might.

Database usage · pro developers · Stack Overflow 2025
PostgreSQL
55.6%
↑ up from 48.7%
MySQL
40.5%
SQLite
32%
MongoDB
26%
↓ only one shrinking
Redis
22%
Fig. 1 Stack Overflow 2025: database usage among professional developers. Postgres pulled away at the top; MongoDB was the one major database trending down.

Why did “just use Postgres” win?

It won because one Postgres database can replace half your stack, and that pitch is mostly true. The vector database for your AI features, the search cluster, the job queue, the cron scheduler, the geospatial database for your maps: pgvector, built-in full-text search, a queue table, pg_cron, and PostGIS cover all of it. Instead of six systems to run, back up, and debug at 3 a.m., you have one.

The meme also has teeth because of a story every senior developer has watched play out. A team picks MongoDB because schemas feel like homework and they just want to ship. Then they need a second collection, then a third, and those collections have to reference each other. The lookups crawl, they are hand-writing rollback code a real database would have handled for free, and a year later they admit the data was relational all along and start a slow migration to Postgres. It happens so often it is basically a genre.

What is the 4KB rule in Postgres?

The 4KB rule says keep your JSON documents under roughly four kilobytes, about a page of text, and make sure they never grow past it. Below that line, Postgres is great at storing JSON through its JSONB type, often faster than MongoDB. Let documents grow past it on an update-heavy workload, and Postgres drives off a cliff. The reason is one fact about how each database changes a record.

Picture your data as a car packed in a crate. MongoDB stores the whole car pre-assembled, and to change one bolt it reaches in and swaps the bolt. Postgres, when you stuff that car into a single JSONB blob, cannot do that. To change one field it rebuilds the entire car, writes a brand-new crate, throws the old one out, and re-points every index. That extra work is called write amplification, and on big, frequently-updated documents it is brutal.

Fig. 2 The same one-field update, two mechanisms. MongoDB writes in place; Postgres rewrites the whole row and re-points every index. The gap only matters once documents get large and hot.

The threshold ties back to a Postgres storage mechanism called TOAST, which kicks in for large values. This is not a tenfold blowout on every workload, and you can dodge it: pull the hot fields out of the blob into real columns, and the rewrites mostly stop. But the second you do that, you have stopped using Postgres as a document store and started modeling your data the way Postgres wanted all along. Which is the whole point.

When does MongoDB actually win?

MongoDB wins when your data refuses to behave like rows. The sharpest case is the 4KB cliff above: a hot path that hammers updates into documents bigger than four kilobytes. But there are two more, and together they mark the lane where picking Postgres is the real mistake.

The first is schemas that will not sit still, meaning data that is legitimately different from one record to the next. Think of healthcare files where a single patient nests claims inside visits inside diagnoses, dozens of levels deep, with no two records shaped alike. The second is scale: when you need to spread writes across a fleet of machines from day one, MongoDB shards natively, where Postgres makes you bolt on an extension or shard by hand. It also has change streams, so it can tap your app the instant a document changes with almost no plumbing.

Shape

Schemas that won’t hold still

Data genuinely different from one record to the next: nested healthcare files, or fields users invent at runtime. Forcing it into rigid tables fights the database on every query.

Scale

Day-one sharding

Spreading writes across a fleet of machines from the start. MongoDB shards natively; Postgres makes you bolt on an extension or shard by hand.

Stream

Change streams

MongoDB can tap your app the instant a document changes, with almost no plumbing. Postgres needs extra parts to do the same.

Fig. 3 The three workloads where reaching for MongoDB on purpose is correct. Outside these, the scale features solve a problem most apps never have.

Is MongoDB just for developers who skip schema design?

Often, yes, and that is the uncomfortable part. Plenty of teams reach for MongoDB because writing a schema sounds like work, not because their data is unusual. Their data is perfectly ordinary, boring, relational data that would be happier in a table. This is most MongoDB adoption, far more than the handful of variable-schema cases above.

Skipping the schema does not make it disappear. There is always a schema. If you do not write it down, it lives somewhere worse: scattered across your application code as a minefield of assumptions about what each document might hold. The work is still there, waiting for whoever is on call the night a missing field blows up a query. And if you do need a document store on AWS, a lot of teams now grab DynamoDB instead, which makes MongoDB’s reason to exist shakier than the meme admits.

Postgres isn’t free either: the maintenance bill

Before the Postgres crowd gets comfortable, their database is not free either; it just hides the bill. Those dead row copies from rewriting records pile up, and a background chore called vacuum has to sweep them. On a busy database it falls behind, bloats your tables, and burns CPU at the worst possible moment. There are seasoned engineers quietly moving to MySQL just to stop dealing with it. Failover is another sore spot: if you want Postgres to recover on its own when a server dies, you assemble that from third-party parts, while MongoDB ships it in the box.

MongoDB has a footgun that will wreck your week too. Run a single MongoDB server on its default standalone settings and it can report your writes succeeded when they did not. A crash swallows the last sliver of data silently, with no error thrown.

SQL vs NoSQL: rows or documents?

The honest version of this comparison drops the SQL-versus-NoSQL frame entirely, because that fight ended years ago. Postgres learned to store documents through JSONB, MongoDB learned to do ACID transactions, and the old battle lines dissolved. The real question is smaller and sharper: is your data a row with relationships to other rows, or a self-contained document you read and write as one whole thing?

For almost everyone, the answer is rows, and that means Postgres. The table below is the quick version of how the two line up, and the decision fork after it is the only mental model you actually need.

DimensionPostgreSQLMongoDB
Data modelRelational rows, plus JSON via JSONBJSON-like documents in collections
Small JSON (<4KB)Fast, often faster than MongoDBFast, but no edge here
Big hot documents (>4KB)Write amplification: full row rewriteUpdates in place; clear win
Variable schemaPossible, but fights you on queriesNative strength
ShardingBolt-on extension or manualNative, day one
TransactionsBattle-tested ACIDACID since 4.0, less mature
FailoverThird-party parts to assembleBuilt in with replica sets
MaintenanceVacuum and bloat to manageDurable defaults need configuring

The real question

A row with relationships

Each thing lives once; others point at it. Rename it in one place and every query sees it. → Postgres.

A self-contained document

Read and written as one whole thing, no joins needed. Self-contained and shaped its own way. → MongoDB.

For almost everyone the answer is rows. That is the whole case for Postgres as the default.

Fig. 4 The whole decision in one fork. A row that relates to other rows points at Postgres; a document you handle whole points at MongoDB. Almost every app is the left path.

Postgres vs MongoDB: how to choose

Make Postgres your default and do not apologize for it. It covers relational data, JSON, search, and vectors in one place, the tooling is deep, and leaving is easy because the data is standard SQL. For the overwhelming majority of apps, “just use Postgres” is correct, and now you can say why instead of reciting it.

Reach for MongoDB on purpose, never on reflex, and only in three cases: your hot path hammers updates into documents bigger than four kilobytes, your data’s shape refuses to hold still, or you need writes sharded across machines from day one. Outside those, MongoDB is a problem you are importing. The meme is right. Just be the one who can explain the exception, so the next time someone asks, you will not fold.

For the animated version of this showdown, with the 4KB cliff and the write-amplification mechanism laid out on screen, watch the full breakdown on YouTube.

Frequently asked questions

Is Postgres better than MongoDB?

For most apps, yes. Postgres handles relational data, JSON, full-text search, and vector search in one database, and it topped the 2025 Stack Overflow survey at 55.6% usage. MongoDB wins in narrow cases: update-heavy documents over 4KB, schemas that change per record, and writes sharded from day one.

What is the 4KB rule in Postgres?

It is a rough threshold for JSONB documents. Below about 4KB, Postgres stores and updates JSON fast, often faster than MongoDB. Past it, updating one field forces Postgres to rewrite the whole row and every index pointing at it. That write amplification is where MongoDB pulls ahead.

When should I use MongoDB instead of Postgres?

Reach for MongoDB on purpose in three cases: your hot path hammers updates into documents bigger than 4KB, your data shape is genuinely different from one record to the next, or you need writes sharded across machines from day one. Outside those, Postgres is the safer default.

Is MongoDB faster than Postgres?

It depends on document size. For small JSON documents under about 4KB, Postgres JSONB is often faster. For large documents that are updated frequently, MongoDB updates in place while Postgres rewrites the whole row, so MongoDB wins clearly. There is no single faster database; it is workload-specific.

Is it still SQL vs NoSQL in 2026?

No. Postgres learned to store JSON documents through JSONB, and MongoDB added ACID transactions, so the old battle lines dissolved. The real question is smaller: is your data a row with relationships to other rows, or a self-contained document you read and write as one whole thing?

Does Postgres have hidden costs compared to MongoDB?

Yes. Postgres needs vacuum to sweep dead row copies, and on busy databases that maintenance falls behind and burns CPU. It also has no built-in automatic failover, which you assemble from third-party parts. MongoDB ships failover in the box, but its standalone defaults can silently lose recent writes on a crash.

Sources

  1. Stack Overflow · 2025 Developer Survey (Technology, database usage) · retrieved 2026-06-25
  2. Tiger Data · "It’s 2026, Just Use Postgres" · retrieved 2026-06-25
  3. Hacker News · discussion of "It’s 2026, Just Use Postgres" (532 points) · retrieved 2026-06-25
  4. PostgreSQL · Documentation: TOAST (the mechanism behind the 4KB rule) · retrieved 2026-06-25
  5. PostgreSQL · PostgreSQL 18 Released (Sept 25, 2025) · retrieved 2026-06-25
  6. MongoDB · 8.0 release notes (native sharding, change streams) · retrieved 2026-06-25
  7. PostgreSQL · pgvector (vector search extension) · retrieved 2026-06-25
  8. PostGIS · spatial extension for PostgreSQL · retrieved 2026-06-25
</>

Ricardo de Jong

Creator of Devsplainers

Ricardo de Jong makes Devsplainers, turning complex developer and AI topics into short animated videos and written companions. Each article is built from the same research and script behind the video. No hype, no jargon walls.

The newsletter

Liked this? Get the Take-Outs.

One email every Tuesday: a spicy take on a trending dev topic, video out-takes, and the tool of the week. Free.

Subscribe
<devsplainers>