Reading data
Fetching single objects
Mongoose
const user = await findById(id)
Prisma
const user = await prisma.user({ id })
Fetching selected scalars of single objects
Mongoose
const user = await findById(id).select('id email')
Prisma
const userFragment = await prisma.user({ id }).$fragment(`
fragment NameAndEmail on User { id email }`
`)
Fetching relations
Mongoose
const userWithPosts = await User.findById(id).populate('posts')
Prisma
const postsByUser = await prisma.user({ id }).posts()
Copy
Filtering for concrete values
Mongoose
const user = await User.find({
name: 'Alice',
})
Prisma
const user = await prisma.users({
where: {
name: 'Alice',
},
})
Other filter criteria
Mongoose
Mongoose exposes the MongoDB query selectors as filter criteria.
Prisma
Prisma generates many additional filters that are commonly used in modern application development:
<field>_ends_with
&<field>_starts_with
<field>_not_ends_with
&<field>_not_starts_with
<field>_gt
&<field>_gte
<field>_lt
&<field>_lte
<field>_contains
&<field>_not_contains
<field>_in
&<field>_not_in
Relation filters
Mongoose
Mongoose doesn't offer a dedicated API for relation filters. You can get similar functionality by sending a raw SQL query to the database.
Prisma
Prisma 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, you want to fetch only those users that wrote a post with the title "Hello World". The filter criteria is therefore not referencing the user model, but the post model that's related to the user model:
query {
user(where: {
posts_some: {
title: "Hello World"
}
}) {
id
}
}
Pagination
Mongoose
const posts = await Post.find({
skip: 5,
limit: 10,
})
Prisma
const posts = await prisma.posts({
skip: 5,
first: 10,
})
In addition to skip
and first
, the Prisma API also offers:
last
before
&after
for cursor based pagination- Relay-style pagination
Writing data
Creating objects
Mongoose
const user = await User.create({ name: 'Alice', email: 'alice@prisma.io', })
Copy
Prisma
const user = await new User({
name: 'Alice',
email: 'alice@prisma.io',
})
Updating objects
Mongoose
const updatedUser = await User.findOneAndUpdate( { _id: id }, { $set: { name: 'James', email: 'james@prisma.io', }, }, )
Copy
Prisma
const updatedUser = await prisma.updateUser({
where: { id },
data: {
name: 'James',
email: 'james@prisma.io',
},
})
Deleting objects
Mongoose
await User.deleteOne({ _id: id })
Prisma
const deletedUser = await prisma.deleteUser({ id })