Fields & types
This section covers various special fields and types you can use with Prisma Client.
Working with Decimal
Decimal
fields are represented by the Decimal.js
library. The following example demonstrates how to import and use Prisma.Decimal
:
import { PrismaClient, Prisma } from '@prisma/client'
const newTypes = await prisma.sample.create({
data: {
cost: new Prisma.Decimal(24.454545),
},
})
You can also perform arithmetic operations:
import { PrismaClient, Prisma } from '@prisma/client'
const newTypes = await prisma.sample.create({
data: {
cost: new Prisma.Decimal(24.454545).plus(1),
},
})
Prisma.Decimal
uses Decimal.js, see Decimal.js docs to learn more.
The use of the Decimal
field is not currently supported in MongoDB.
Working with BigInt
Overview
BigInt
fields are represented by the BigInt
type (Node.js 10.4.0+ required). The following example demonstrates how to use the BigInt
type:
import { PrismaClient, Prisma } from '@prisma/client'
const newTypes = await prisma.sample.create({
data: {
revenue: BigInt(534543543534),
},
})
Serializing BigInt
Prisma Client returns records as plain JavaScript objects. If you attempt to use JSON.stringify
on an object that includes a BigInt
field, you will see the following error:
Do not know how to serialize a BigInt
To work around this issue, use a customized implementation of JSON.stringify
:
JSON.stringify(
this,
(key, value) => (typeof value === 'bigint' ? value.toString() : value) // return everything else unchanged
)
Working with Bytes
Bytes
fields are represented by the Uint8Array
type. The following example demonstrates how to use the Uint8Array
type:
import { PrismaClient, Prisma } from '@prisma/client'
const newTypes = await prisma.sample.create({
data: {
myField: new Uint8Array([1, 2, 3, 4]),
},
})
Note that before Prisma v6, Bytes
were represented by the Buffer
type:
import { PrismaClient, Prisma } from '@prisma/client'
const newTypes = await prisma.sample.create({
data: {
myField: Buffer.from([1, 2, 3, 4]),
},
})
Learn more in the upgrade guide to v6.
Working with DateTime
When creating records that have fields of type DateTime
, Prisma Client accepts values as Date
objects adhering to the ISO 8601 standard.
Consider the following schema:
model User {
id Int @id @default(autoincrement())
birthDate DateTime?
}
Here are some examples for creating new records:
Jan 01, 1998; 00 h 00 min and 000 ms
await prisma.user.create({
data: {
birthDate: new Date('1998')
}
})
Dec 01, 1998; 00 h 00 min and 000 ms
await prisma.user.create({
data: {
birthDate: new Date('1998-12')
}
})
Dec 24, 1998; 00 h 00 min and 000 ms
await prisma.user.create({
data: {
birthDate: new Date('1998-12-24')
}
})
Dec 24, 1998; 22 h 33 min and 444 ms
await prisma.user.create({
data: {
birthDate: new Date('1998-12-24T06:22:33.444Z')
}
})
Working with Json
Working with scalar lists / scalar arrays
See: Working with scalar lists / arrays
Working with composite IDs and compound unique constraints
See: Working with composite IDs and compound unique constraints