Esta documentación ha sido traducida automáticamente por IA.
Base de Datos es una herramienta de interacción con bases de datos que NocoBase le proporciona, ofreciendo funcionalidades muy convenientes para aplicaciones no-code y low-code. Actualmente, las bases de datos compatibles son:
En el constructor de Database, puede configurar la conexión a la base de datos pasando el parámetro options.
Para conocer los parámetros de configuración detallados, consulte Constructor.
Database define la estructura de la base de datos a través de la colección. Un objeto de colección representa una tabla en la base de datos.
Una vez definida la estructura de la base de datos, puede usar el método sync() para sincronizarla.
Para un uso más detallado de la colección, consulte Colección.
Database opera con los datos a través de Repository.
Para un uso más detallado de las operaciones CRUD de datos, consulte Repository.
Firma
constructor(options: DatabaseOptions)Crea una instancia de la base de datos.
Parámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
options.host | string | 'localhost' | Host de la base de datos |
options.port | number | - | Puerto del servicio de la base de datos, con un puerto predeterminado según la base de datos utilizada |
options.username | string | - | Nombre de usuario de la base de datos |
options.password | string | - | Contraseña de la base de datos |
options.database | string | - | Nombre de la base de datos |
options.dialect | string | 'mysql' | Tipo de base de datos |
options.storage? | string | ':memory:' | Modo de almacenamiento para SQLite |
options.logging? | boolean | false | ¿Habilitar el registro (logging)? |
options.define? | Object | {} | Parámetros de definición de tabla predeterminados |
options.tablePrefix? | string | '' | Extensión de NocoBase, prefijo de nombre de tabla |
options.migrator? | UmzugOptions | {} | Extensión de NocoBase, parámetros relacionados con el gestor de migraciones, consulte la implementación de Umzug. |
addMigration()Agrega un único archivo de migración.
Firma
addMigration(options: MigrationItem)Parámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
options.name | string | - | Nombre del archivo de migración |
options.context? | string | - | Contexto del archivo de migración |
options.migration? | typeof Migration | - | Clase personalizada para el archivo de migración |
options.up | Function | - | Método up del archivo de migración |
options.down | Function | - | Método down del archivo de migración |
Ejemplo
addMigrations()Agrega archivos de migración desde un directorio especificado.
Firma
addMigrations(options: AddMigrationsOptions): voidParámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
options.directory | string | '' | Directorio donde se encuentran los archivos de migración |
options.extensions | string[] | ['js', 'ts'] | Extensiones de archivo |
options.namespace? | string | '' | Espacio de nombres |
options.context? | Object | { db } | Contexto del archivo de migración |
Ejemplo
inDialect()Verifica si el tipo de base de datos actual es uno de los tipos especificados.
Firma
inDialect(dialect: string[]): booleanParámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
dialect | string[] | - | Tipo de base de datos, los valores posibles son mysql/postgres/mariadb |
getTablePrefix()Obtiene el prefijo del nombre de la tabla de la configuración.
Firma
getTablePrefix(): stringcollection()Define una colección. Esta llamada es similar al método define de Sequelize, creando la estructura de la tabla solo en memoria. Para persistirla en la base de datos, necesita llamar al método sync.
Firma
collection(options: CollectionOptions): CollectionParámetros
Todos los parámetros de configuración de options son consistentes con el constructor de la clase Collection, consulte Colección.
Eventos
'beforeDefineCollection': Se activa antes de definir una colección.'afterDefineCollection': Se activa después de definir una colección.Ejemplo
getCollection()Obtiene una colección definida.
Firma
getCollection(name: string): CollectionParámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
name | string | - | Nombre de la colección |
Ejemplo
hasCollection()Verifica si se ha definido una colección específica.
Firma
hasCollection(name: string): booleanParámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
name | string | - | Nombre de la colección |
Ejemplo
removeCollection()Elimina una colección definida. Solo se elimina de la memoria; para persistir el cambio, necesita llamar al método sync.
Firma
removeCollection(name: string): voidParámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
name | string | - | Nombre de la colección |
Eventos
'beforeRemoveCollection': Se activa antes de eliminar una colección.'afterRemoveCollection': Se activa después de eliminar una colección.Ejemplo
import()Importa todos los archivos de un directorio como configuraciones de colección en memoria.
Firma
async import(options: { directory: string; extensions?: ImportFileExtension[] }): Promise<Map<string, Collection>>Parámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
options.directory | string | - | Ruta del directorio a importar |
options.extensions | string[] | ['ts', 'js'] | Extensiones de archivo a escanear |
Ejemplo
La colección definida en el archivo ./collections/books.ts es la siguiente:
Importe la configuración relevante cuando se cargue el plugin:
registerFieldTypes()Registra tipos de campo personalizados.
Firma
registerFieldTypes(fieldTypes: MapOf<typeof Field>): voidParámetros
fieldTypes es un par clave-valor donde la clave es el nombre del tipo de campo y el valor es la clase del tipo de campo.
Ejemplo
registerModels()Registra clases de modelo de datos personalizadas.
Firma
registerModels(models: MapOf<ModelStatic<any>>): voidParámetros
models es un par clave-valor donde la clave es el nombre del modelo y el valor es la clase del modelo.
Ejemplo
registerRepositories()Registra clases de repositorio de datos personalizadas.
Firma
registerRepositories(repositories: MapOf<RepositoryType>): voidParámetros
repositories es un par clave-valor donde la clave es el nombre del repositorio y el valor es la clase del repositorio.
Ejemplo
registerOperators()Registra operadores de consulta de datos personalizados.
Firma
registerOperators(operators: MapOf<OperatorFunc>)Parámetros
operators es un par clave-valor donde la clave es el nombre del operador y el valor es la función que genera la declaración de comparación.
Ejemplo
getModel()Obtiene una clase de modelo de datos definida. Si no se registró previamente ninguna clase de modelo personalizada, se devolverá la clase de modelo predeterminada de Sequelize. El nombre predeterminado es el mismo que el nombre de la colección.
Firma
getModel(name: string): ModelParámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
name | string | - | Nombre del modelo registrado |
Ejemplo
Nota: La clase de modelo obtenida de una colección no es estrictamente igual a la clase de modelo registrada, sino que hereda de ella. Dado que las propiedades de la clase de modelo de Sequelize se modifican durante la inicialización, NocoBase maneja automáticamente esta relación de herencia. Excepto por la desigualdad de clases, todas las demás definiciones se pueden usar normalmente.
getRepository()Obtiene una clase de repositorio de datos personalizada. Si no se registró previamente ninguna clase de repositorio de datos personalizada, se devolverá la clase de repositorio de datos predeterminada de NocoBase. El nombre predeterminado es el mismo que el nombre de la colección.
Las clases de repositorio se utilizan principalmente para operaciones CRUD basadas en modelos de datos, consulte Repository.
Firma
getRepository(name: string): RepositorygetRepository(name: string, relationId?: string | number): RepositoryParámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
name | string | - | Nombre del repositorio registrado |
relationId | string | number | - | Valor de la clave foránea para datos relacionales |
Cuando el nombre es un nombre de asociación como 'tables.relations', se devolverá la clase de repositorio asociada. Si se proporciona el segundo parámetro, el repositorio se basará en el valor de la clave foránea de los datos relacionales cuando se utilice (consultas, actualizaciones, etc.).
Ejemplo
Supongamos que existen dos colecciones, posts y authors, y la colección de posts tiene una clave foránea que apunta a la colección de authors:
on()Escucha eventos de la base de datos.
Firma
on(event: string, listener: (...args: any[]) => void | Promise<void>): voidParámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| event | string | - | Nombre del evento |
| listener | Function | - | Escuchador de eventos |
Los nombres de los eventos admiten los eventos de Modelo de Sequelize de forma predeterminada. Para eventos globales, escuche utilizando el formato <sequelize_model_global_event>, y para eventos de Modelo individuales, utilice el formato <model_name>.<sequelize_model_event>.
Para descripciones de parámetros y ejemplos detallados de todos los tipos de eventos incorporados, consulte la sección Eventos incorporados.
off()Elimina una función de escucha de eventos.
Firma
off(name: string, listener: Function)Parámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
| name | string | - | Nombre del evento |
| listener | Function | - | Escuchador de eventos |
Ejemplo
auth()Autenticación de la conexión a la base de datos. Se puede utilizar para asegurar que la aplicación ha establecido una conexión con los datos.
Firma
auth(options: QueryOptions & { retry?: number } = {}): Promise<boolean>Parámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
options? | Object | - | Opciones de autenticación |
options.retry? | number | 10 | Número de reintentos en caso de fallo de autenticación |
options.transaction? | Transaction | - | Objeto de transacción |
options.logging? | boolean | Function | false | ¿Imprimir registros (logs)? |
Ejemplo
reconnect()Vuelve a conectar a la base de datos.
Ejemplo
closed()Verifica si la conexión a la base de datos está cerrada.
Firma
closed(): booleanclose()Cierra la conexión a la base de datos. Equivalente a sequelize.close().
sync()Sincroniza la estructura de la colección de la base de datos. Equivalente a sequelize.sync(); para los parámetros, consulte la documentación de Sequelize.
clean()Limpia la base de datos, eliminando todas las colecciones.
Firma
clean(options: CleanOptions): Promise<void>Parámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
options.drop | boolean | false | ¿Eliminar todas las colecciones? |
options.skip | string[] | - | Configuración de nombres de colección a omitir |
options.transaction | Transaction | - | Objeto de transacción |
Ejemplo
Elimina todas las colecciones excepto la colección users.
defineCollection()Crea el contenido de configuración para una colección.
Firma
defineCollection(name: string, config: CollectionOptions): CollectionOptionsParámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
collectionOptions | CollectionOptions | - | Igual que todos los parámetros de db.collection() |
Ejemplo
Para un archivo de configuración de colección que será importado por db.import():
extendCollection()Extiende el contenido de configuración de una estructura de colección ya en memoria, principalmente para el contenido de archivos importados por el método import(). Este método es un método de nivel superior exportado por el paquete @nocobase/database y no se llama a través de una instancia de db. También se puede usar el alias extend.
Firma
extendCollection(collectionOptions: CollectionOptions, mergeOptions?: MergeOptions): ExtendedCollectionOptionsParámetros
| Parámetro | Tipo | Valor predeterminado | Descripción |
|---|---|---|---|
collectionOptions | CollectionOptions | - | Igual que todos los parámetros de db.collection() |
mergeOptions? | MergeOptions | - | Parámetros para el paquete npm deepmerge |
Ejemplo
Definición original de la colección books (books.ts):
Definición extendida de la colección books (books.extend.ts):
Si los dos archivos anteriores se importan al llamar a import(), después de ser extendidos nuevamente con extend(), la colección books tendrá los campos title y price.
Este método es muy útil para extender estructuras de colección ya definidas por plugins existentes.
La base de datos activa los siguientes eventos correspondientes en las distintas etapas de su ciclo de vida. Al suscribirse a ellos con el método on(), puede realizar un procesamiento específico para satisfacer ciertas necesidades comerciales.
'beforeSync' / 'afterSync'Se activa antes y después de que una nueva configuración de estructura de colección (campos, índices, etc.) se sincronice con la base de datos. Generalmente se activa cuando se ejecuta collection.sync() (llamada interna) y se utiliza para manejar la lógica de extensiones de campos especiales.
Firma
Tipo
Ejemplo
'beforeValidate' / 'afterValidate'Antes de crear o actualizar datos, existe un proceso de validación basado en las reglas definidas en la colección. Los eventos correspondientes se activan antes y después de la validación. Esto se activa cuando se llama a repository.create() o repository.update().
Firma
Tipo
Ejemplo
'beforeCreate' / 'afterCreate'Los eventos correspondientes se activan antes y después de crear un registro. Esto se activa cuando se llama a repository.create().
Firma
Tipo
Ejemplo
'beforeUpdate' / 'afterUpdate'Los eventos correspondientes se activan antes y después de actualizar un registro. Esto se activa cuando se llama a repository.update().
Firma
Tipo
Ejemplo
'beforeSave' / 'afterSave'Los eventos correspondientes se activan antes y después de crear o actualizar un registro. Esto se activa cuando se llama a repository.create() o repository.update().
Firma
Tipo
Ejemplo
'beforeDestroy' / 'afterDestroy'Los eventos correspondientes se activan antes y después de eliminar un registro. Esto se activa cuando se llama a repository.destroy().
Firma
Tipo
Ejemplo
'afterCreateWithAssociations'Este evento se activa después de crear un registro con datos de asociación jerárquica. Se activa cuando se llama a repository.create().
Firma
Tipo
Ejemplo
'afterUpdateWithAssociations'Este evento se activa después de actualizar un registro con datos de asociación jerárquica. Se activa cuando se llama a repository.update().
Firma
Tipo
Ejemplo
'afterSaveWithAssociations'Este evento se activa después de crear o actualizar un registro con datos de asociación jerárquica. Se activa cuando se llama a repository.create() o repository.update().
Firma
Tipo
Ejemplo
'beforeDefineCollection'Se activa antes de definir una colección, por ejemplo, al llamar a db.collection().
Nota: Este es un evento síncrono.
Firma
Tipo
Ejemplo
'afterDefineCollection'Se activa después de definir una colección, por ejemplo, al llamar a db.collection().
Nota: Este es un evento síncrono.
Firma
Tipo
Ejemplo
'beforeRemoveCollection' / 'afterRemoveCollection'Se activa antes y después de que una colección se elimine de la memoria, por ejemplo, al llamar a db.removeCollection().
Nota: Este es un evento síncrono.
Firma
Tipo
Ejemplo