Does MongoDB Work With Drizzle ORM?

Partially CompatibleLast verified: 2026-02-26

Drizzle ORM is primarily SQL-focused and lacks native MongoDB support, requiring workarounds or custom adapters to use together.

Quick Facts

Compatibility
partial
Setup Difficulty
Complex
Official Integration
No — community maintained
Confidence
medium
Minimum Versions
Drizzle ORM: 0.28.0

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

Polyglot persistence: relational user accounts via Drizzle + flexible document logs in MongoDB
Migration scenarios: gradually moving from MongoDB to SQL while maintaining a read layer
Service composition: microservice using Drizzle for core data + MongoDB for user-generated content
Development prototyping: Drizzle for structured data + MongoDB for rapidly evolving features

Quick Setup

bash
npm install drizzle-orm drizzle-kit pg mongodb
typescript
import { 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

critical

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

warning

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

warning

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

info

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