Does MongoDB Work With Drizzle ORM?
Drizzle ORM is primarily SQL-focused and lacks native MongoDB support, requiring workarounds or custom adapters to use together.
Quick Facts
How MongoDB Works With Drizzle ORM
Drizzle ORM is architected around relational SQL databases (PostgreSQL, MySQL, SQLite, etc.) and does not have first-class MongoDB support. The core query builder, migrations system, and schema definition tools assume ACID transactions and normalized table structures. However, developers can use MongoDB alongside Drizzle by treating them as separate concerns: use Drizzle for relational data and interact with MongoDB directly via the native MongoDB driver or Mongoose for document operations. This hybrid approach works but eliminates Drizzle's primary benefits—you lose type safety, unified query syntax, and ORM conveniences for your document data. Some teams have attempted custom Drizzle adapters, but these remain experimental and unsupported. The experience is fragmented: SQL queries benefit from Drizzle's type checking while MongoDB queries fall back to manual typing.
Best Use Cases
Quick Setup
npm install drizzle-orm drizzle-kit pg mongodbimport { drizzle } from 'drizzle-orm/pg';
import { MongoClient } from 'mongodb';
import { users } from './schema';
import { eq } from 'drizzle-orm';
const pgDb = drizzle(process.env.DATABASE_URL);
const mongoClient = new MongoClient(process.env.MONGODB_URI);
async function getUserWithLogs(userId: number) {
// Drizzle for relational data
const user = await pgDb.select().from(users).where(eq(users.id, userId));
// MongoDB for document data
const db = mongoClient.db('app');
const logs = await db.collection('activity_logs')
.find({ userId })
.toArray();
return { user: user[0], logs };
}
await getUserWithLogs(42);Known Issues & Gotchas
No unified schema or migrations across databases, forcing manual synchronization
Fix: Maintain separate schema files and migration systems for each database; document relationships explicitly in code
Lost type safety when querying MongoDB directly; no compile-time validation
Fix: Use TypeScript interfaces alongside MongoDB queries and consider a lightweight schema validator like Zod
Transactions across Drizzle (SQL) and MongoDB require manual management or sacrificed ACID guarantees
Fix: Use MongoDB multi-document transactions separately and accept eventual consistency, or redesign schema to avoid cross-database transactions
Cognitive overhead managing two different query syntaxes and ORM patterns simultaneously
Fix: Create abstraction layers (service classes) to encapsulate each database's query logic
Alternatives
- •Mongoose + Express: Full MongoDB ORM with schema validation, but loses SQL capabilities
- •Prisma + MongoDB: Prisma supports MongoDB as a connector with more native integration than Drizzle
- •TypeORM + MongoDB: TypeORM has experimental MongoDB support with unified decorators across both databases
Resources
Related Compatibility Guides
Explore more compatibility guides