Skip to main content
Prisma Documentation Docs

Search documentation

Type to search this documentation.

On this pageOverview

Mongoose

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

Prisma ORM

const user = await prisma.user.findUnique({

  where: {

    id: 1,

  },

});

Mongoose

const result = await User.findById(1);

Prisma ORM

const user = await prisma.user.findUnique({

  where: {

    id: 1,

  },

  select: {

    name: true,

  },

});

Mongoose

const user = await User.findById(1).select(["name"]);

Prisma ORM

include"
const userWithPost = await prisma.user.findUnique({

  where: {

    id: 2,

  },

  include: {

    post: true,

  },

})
Fluent API
const userWithPost = await prisma.user
  .findUnique({
    where: {
      id: 2,
    },
  })
  .post()

Mongoose

const userWithPost = await User.findById(2).populate("post");

Prisma ORM

const posts = await prisma.post.findMany({

  where: {

    title: {

      contains: "Hello World",

    },

  },

});

Mongoose

const posts = await Post.find({

  title: "Hello World",

});

Prisma ORM

Prisma ORM generates many additional filters that are commonly used in application development.

Mongoose

Mongoose exposes the MongoDB query selectors as filter criteria.

Prisma ORM

Prisma ORM lets you filter a list based on a criteria that applies not only to the models of the list being retrieved, but to a relation of that model.

For example, the following query returns users with one or more posts with "Hello" in the title:

const posts = await prisma.user.findMany({

  where: {

    Post: {

      some: {

        title: {

          contains: "Hello",

        },

      },

    },

  },

});

Mongoose

Mongoose doesn't offer a dedicated API for relation filters. You can get similar functionality by adding an additional step to filter the results returned by the query.

Prisma ORM

Cursor-style pagination:

const page = prisma.post.findMany({

  before: {

    id: 242,

  },

  last: 20,

});

Offset pagination:

const cc = prisma.post.findMany({

  skip: 200,

  first: 20,

});

Mongoose

const posts = await Post.find({

  skip: 200,

  limit: 20,

});

Prisma ORM

const user = await prisma.user.create({

  data: {

    name: "Alice",

    email: "alice@prisma.io",

  },

});

Mongoose

create"
const user = await User.create({

  name: 'Alice',

  email: 'alice@prisma.io',

})
Using save
const user = new User({
  name: 'Alice',
  email: 'alice@prisma.io',
})
await user.save()

Prisma ORM

const user = await prisma.user.update({

  data: {

    name: "Alicia",

  },

  where: {

    id: 2,

  },

});

Mongoose

findOneAndUpdate"
const updatedUser = await User.findOneAndUpdate(

  { _id: 2 },

  {

    $set: {

      name: 'Alicia',

    },

  }

)
Using save
user.name = 'Alicia'
await user.save()

Prisma ORM

const user = prisma.user.delete({

  where: {

    id: 10,

  },

});

Mongoose

await User.deleteOne({ _id: 10 });

Prisma ORM

const users = await prisma.user.deleteMany({

  where: {

    id: {

      in: [1, 2, 6, 6, 22, 21, 25],

    },

  },

});

Mongoose

await User.deleteMany({ id: { $in: [1, 2, 6, 6, 22, 21, 25] } });
Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu