Mongoose
Source URL: https://docs.prisma.io/docs/orm/more/comparisons/prisma-and-mongoose
Mongoose
Section titled “Mongoose”Learn how Prisma ORM compares to 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.
Fetching single objects
Section titled “Fetching single objects”Prisma ORM
const user = await prisma.user.findUnique({ where: { id: 1, }, });Mongoose
const result = await User.findById(1);Fetching selected scalars of single objects
Section titled “Fetching selected scalars of single objects”Prisma ORM
const user = await prisma.user.findUnique({ where: { id: 1, }, select: { name: true, }, });Mongoose
const user = await User.findById(1).select(["name"]);Fetching relations
Section titled “Fetching relations”Prisma ORM
Using include
Fluent API
const userWithPost = await prisma.user.findUnique({ where: { id: 2, }, include: { post: true, }, })Mongoose
const userWithPost = await User.findById(2).populate("post");Filtering for concrete values
Section titled “Filtering for concrete values”Prisma ORM
const posts = await prisma.post.findMany({ where: { title: { contains: "Hello World", }, }, });Mongoose
const posts = await Post.find({ title: "Hello World", });Other filter criteria
Section titled “Other filter criteria”Prisma ORM
Prisma ORM generates many additional filters that are commonly used in modern application development.
Mongoose
Mongoose exposes the MongoDB query selectors as filter criteria.
Relation filters
Section titled “Relation filters”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.
Pagination
Section titled “Pagination”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, });Creating objects
Section titled “Creating objects”Prisma ORM
const user = await prisma.user.create({ data: { name: "Alice", email: "alice@prisma.io", }, });Mongoose
Using create
Using save
const user = await User.create({ name: 'Alice', email: 'alice@prisma.io', })Updating objects
Section titled “Updating objects”Prisma ORM
const user = await prisma.user.update({ data: { name: "Alicia", }, where: { id: 2, }, });Mongoose
Using findOneAndUpdate
Using save
const updatedUser = await User.findOneAndUpdate( { _id: 2 }, { $set: { name: 'Alicia', }, } )Deleting objects
Section titled “Deleting objects”Prisma ORM
const user = prisma.user.delete({ where: { id: 10, }, });Mongoose
await User.deleteOne({ _id: 10 });Batch deletes
Section titled “Batch deletes”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] } });