- Get Started
- Product
- Resources
- Tools & SDKs
- Framework
- Reference
- Get Started
- Product
- Resources
- Tools & SDKs
- Framework
- Reference
4.5.8. Data Model Database Index
In this chapter, you’ll learn how to define a database index on a data model.
Define Database Index on Property#
Use the index
method on a property's definition to define a database index.
For example:
The index
method optionally accepts the name of the index as a parameter.
In this example, you define an index on the name
property.
Define Database Index on Data Model#
A data model has an indexes
method that defines database indices on its properties.
The index can be on multiple columns (composite index). For example:
The indexes
method receives an array of indices as a parameter. Each index is an object with a required on
property indicating the properties to apply the index on.
In the above example, you define a composite index on the name
and age
properties.
Index Conditions#
An index can have conditions. For example:
The index object passed to indexes
accepts a where
property whose value is an object of conditions. The object's key is a property's name, and its value is the condition on that property.
In the example above, the composite index is created on the name
and age
properties when the age
's value is 30
.
A property's condition can be a negation. For example:
1import { model } from "@medusajs/framework/utils"2 3const MyCustom = model.define("my_custom", {4 id: model.id().primaryKey(),5 name: model.text(),6 age: model.number().nullable(),7}).indexes([8 {9 on: ["name", "age"],10 where: {11 age: {12 $ne: null,13 },14 },15 },16])17 18export default MyCustom
A property's value in where
can be an object having a $ne
property. $ne
's value indicates what the specified property's value shouldn't be.
In the example above, the composite index is created on the name
and age
properties when age
's value is not null
.
Unique Database Index#
The object passed to indexes
accepts a unique
property indicating that the created index must be a unique index.
For example:
This creates a unique composite index on the name
and age
properties.