Skip to Page NavigationSkip to Page NavigationSkip to Content
Keystone 6 is in Community Preview! For Keystone 5 docs visit v5.keystonejs.com

Database API

The database API provides a programmatic API for running CRUD operations against the internal GraphQL resolvers in your system. Importantly, this API bypasses the GraphQL Server itself, instead invoking the resolver functions directly. The return values of this API are internal item objects, which are suitable to be returned from GraphQL resolvers.

Refer to the internal items guide for details on how to work with internal items in Keystone.

This API executes the access control rules and hooks defined in your system. To bypass these, you can directly use the Prisma Client at context.prisma.

For each list in your system the following API is available at context.db.<listName>.

{
findOne({ where: { id } }),
findMany({ where, take, skip, orderBy }),
count({ where }),
createOne({ data }),
createMany({ data }),
updateOne({ where, data }),
updateMany({ data }),
deleteOne({ where }),
deleteMany({ where }),
}

The arguments to these functions closely correspond to their equivalent GraphQL APIs. Unless otherwise specified, the arguments to all functions are required.

findOne

const user = await context.db.User.findOne({
where: { id: '...' },
});

findMany

All arguments are optional.

const users = await context.db.User.findMany({
where: { name: { startsWith: 'A' } },
take: 10,
skip: 20,
orderBy: [{ name: 'asc' }],
});

count

All arguments are optional.

const count = await context.db.User.count({
where: { name: { startsWith: 'A' } },
});

createOne

const user = await context.db.User.createOne({
data: {
name: 'Alice',
posts: { create: [{ title: 'My first post' }] },
},
});

createMany

const users = await context.db.User.createMany({
data: [
{
name: 'Alice',
posts: [{ create: { title: 'Alices first post' } }],
},
{
name: 'Bob',
posts: [{ create: { title: 'Bobs first post' } }],
},
],
});

updateOne

const user = await context.db.User.updateOne({
where: { id: '...' },
data: {
name: 'Alice',
posts: { create: [{ title: 'My first post' }] },
},
});

updateMany

const users = await context.db.User.updateMany({
data: [
{
where: { id: '...' },
data: {
name: 'Alice',
posts: [{ create: { title: 'Alices first post' } }],
},
},
{
where: { id: '...' },
data: {
name: 'Bob',
posts: [{ create: { title: 'Bobs first post' } }],
},
},
],
});

deleteOne

const user = await context.db.User.deleteOne({
where: { id: '...' },
});

deleteMany

const users = await context.db.User.deleteMany({
where: [{ id: '...' }, { id: '...' }],
});