Stop syncing your vector database.
FermionDB keeps every document and its embedding in one record, and searches both in one MongoDB query.
Works with pymongo, the Go driver and mongosh.
samurai armor with a horned helmet
.jpg&w=3840&q=75)
Armor (Gusoku)
Hiromichi Miura, 1600–2015
score 0.369

Armor (Gusoku)
Jo Michitaka, 1801–1900
score 0.366

Armor (Yoroi)
1701–1800
score 0.351

Armor (Yoroi)
1701–1800
score 0.351

Armor (Gusoku)
Bamen Tomotsugu, 1701–1800
score 0.347

Armor (Yoroi)
1300–1450
score 0.346
The problem
Two databases and a sync job, or one.
Most vector search keeps documents in one place and copies of their vectors in another.
The usual stack
Every write happens twice. Search returns IDs you look up elsewhere.
FermionDB
Write once. One query returns whole documents, filtered and ranked.
The product
A real database, with vector search inside.
Queries, indexes and aggregation work the way they do in MongoDB. The vector is just another field.

One record
Irises at Yatsuhashi (Eight Bridges)
Ogata Kōrin, 1710–1716
{
_id: 39664,
title: "Irises at Yatsuhashi (Eight Bridges)",
artist: "Ogata Kōrin",
department: "Asian Art",
culture: "Japan",
classification: "Paintings",
begin_year: 1710,
end_year: 1716,
is_highlight: true,
embedding: [0.0047, 0.0106, -0.0524, … 509 more]
}Indexes
- artworks_clip512 dims, cosinevector
- department_1filters in searchB-tree
- is_highlight_1filters in searchB-tree
- _id_primaryB-tree
All indexes built from the same record
Search “a horse”, but only the Met's highlights.
Real searches filter: in stock, this store, this region. Here the filter keeps 1,740 of 258,561 artworks.
from pymongo import MongoClient
db = MongoClient(FERMION_URL)
db.shop.products.aggregate(…)Speaks MongoDB
Connect with pymongo, the Go driver or mongosh. No new SDK to learn.
- $vectorSearch
- $match
- $lookup
- $project
One query, start to finish
Rank, join and shape results in the same aggregation pipeline.
from pymongo import MongoClient
db = MongoClient("mongodb://localhost:27017", directConnection=True)
art = db.met.artworks
art.aggregate([{"$vectorSearch": {
"index": "artworks_clip", "path": "embedding",
"queryVector": clip("samurai armor with a horned helmet"),
"filter": {"department": "Arms and Armor"},
"numCandidates": 200, "limit": 6,
}}])$ output
✓ connected to FermionDB
✓ 6 results in 11.2 ms
- 0.369Armor (Gusoku), Hiromichi Miura
- 0.366Armor (Gusoku), Jo Michitaka
- 0.351Armor (Yoroi)
- 0.351Armor (Yoroi)
- 0.347Armor (Gusoku), Bamen Tomotsugu
- 0.346Armor (Yoroi)
$ ▍
Performance
Built for filtered search.
Real apps rarely search everything. In stock, this store, this region: FermionDB filters inside the search.
4.9×
faster than pgvector
4.0 ms vs 19.7 ms median search
8×
lower worst-case latency
4.8 ms vs 38.3 ms for the slowest 1%
100%
of the true top 10 found
pgvector's best: 97%
1,372
searches per second
on one 8-core server, at full accuracy
Top-10 vector search over 180,031 Rangin products (1,408 dimensions) with a filter that matches 1,744 of them, 430 real shopper-style text queries, both engines held to at least 95% recall on the same dedicated server. pgvector 0.8.1 on PostgreSQL 17 with HNSW. Unfiltered searches favour pgvector.
Playground
Search 258,561 artworks. Right now.
The Met's open-access collection, live in FermionDB. Type anything, filter by department, see the query.
Customer story
Rangin finds the outfit. FermionDB finds it fast.
Rangin is a voice shopping assistant for Pakistani fashion. Shoppers describe what they want; FermionDB searches every store for it, in stock and in their region.
- products
- 181,031
- fashion brands
- 5
- regional storefronts
- 12
- dimensions per vector
- 1,408
LAAM, Sapphire, J., Maria B and MTJ

Pricing
Free while it's in preview.
Start in the browser. Bring your own data when you're ready.
Free
Your own FermionDB for 30 minutes, with a shell in the browser.
Join the waitlistFree in preview
A persistent instance for your data, an API key, and help getting started.
Request accessFAQ
Questions, answered.
Is it ready for production?
It already runs Rangin's product search. FermionDB is in preview, and we're bringing teams on one at a time so each gets a hands-on setup.
Is this MongoDB?
No. FermionDB is its own database that speaks the MongoDB wire protocol, so MongoDB drivers and mongosh connect to it. It isn't affiliated with MongoDB, Inc.
Will my Atlas vector search queries work?
$vectorSearch takes the same shape: index, path, queryVector, numCandidates, limit and filter. It must be the first stage, and each collection has one vector index.
Where is it fastest?
Filtered search. When a filter narrows the search to a small slice of the data, FermionDB stays fast and complete. On unfiltered searches pgvector was faster in our tests.
Why the name?
Fermions are the particles that can't share a state. Your document and its vector live in one record, so they can't drift apart either.
Get FermionDB for your team.
Tell us what you're searching. We'll set you up with an instance during the preview.
- Your own FermionDB instance
- Help loading your data
- A direct line to the engineers











