MonarchORM
MoreComparison

Mongoose

Comparing Monarch with Mongoose

This page compares the Monarch ORM and Mongoose APIs. If you want to learn how to migrate from Mongoose to Monarch, check out this guide.

Schema Definition

Monarch ORM

Monarch ORM uses a functional approach to define schemas.

import { boolean, createSchema, number, string } from "monarch-orm";
 
const UserSchema = createSchema("users", {
  name: string().nullable(),
  email: string().lowercase().optional(),
  age: number().optional().default(10),
  isVerified: boolean(),
});

Mongoose

Mongoose uses a class-based approach to define schemas.

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
 
const userSchema = new Schema({
  name: { type: String, required: true },
  email: { type: String, lowercase: true, required: true },
  age: { type: Number, default: 10 },
  isVerified: { type: Boolean, default: false }
});

Connecting to the Database

Monarch ORM

import { createDatabase, createClient } from "monarch-orm";
 
const client = createClient("mongodb://localhost:27017");
const { collections } = createDatabase(client, {
  users: UserSchema,
});

Mongoose

const mongoose = require('mongoose');
 
mongoose.connect('mongodb://localhost:27017/mydatabase', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

Inserting Documents

Monarch ORM

const newUser = await collections.users
  .insert()
  .values({
    name: "Alice",
    email: "alice@example.com",
    age: 25,
    isVerified: true,
  })
  .exec();

Mongoose

const User = mongoose.model('User', userSchema);
 
const newUser = new User({
  name: "Alice",
  email: "alice@example.com",
  age: 25,
  isVerified: true
});
 
await newUser.save();

Querying Documents

Monarch ORM

const users = await collections.users.find({ name: "Alice" }).exec();
console.log(users);

Mongoose

const users = await User.find({});
console.log(users);

Updating Documents

Monarch ORM

const updatedUser = await collections.users
  .updateOne()
  .set({ email: "alice.updated@example.com" })
  .where({ name: "Alice" })
  .exec();

Mongoose

const updatedUser = await User.updateOne(
  { name: "Alice" },
  { email: "alice.updated@example.com" }
);

Deleting Documents

Monarch ORM

const deletedUser = await collections.users
  .deleteOne()
  .where({ name: "Alice" })
  .exec();

Mongoose

const deletedUser = await User.deleteOne({ name: "Alice" });

On this page