logologo
Начало
Руководство
Разработка
Плагины
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Начало
Руководство
Разработка
Плагины
API
logologo
Обзор API

@nocobase/auth

AuthManager
Auth
BaseAuth

@nocobase/cache

CacheManager
Кэш

@nocobase/cli

NocoBase CLI
Глобальные переменные окружения

@nocobase/client

Приложение
Плагин

@nocobase/database

Коллекция
Поле

interfaces

BaseInterface
Операторы фильтрации

RelationRepository

BelongsToManyRepository
belongs-to-repository
HasManyRepository
HasOneRepository
Репозиторий

shared

create-options
destroy-options
find-one
find-options
transaction
update-options

@nocobase/data-source-manager

DataSourceManager
DataSource (абстрактный)
ICollectionManager
ICollection
IField
IModel
IRepository

@nocobase/flow-engine

Менеджер источников данных
Контекст потока
FlowEngine
Модель потока
Ресурс рабочего процесса

@nocobase/logger

Логгер

@nocobase/server

AppCommand
Приложение
AuditManager
Контекст
Миграция
Плагин

@nocobase/sdk

Auth
Storage
Previous Page@nocobase/database
Next PageПоле
Уведомление о переводе ИИ

Эта документация была автоматически переведена ИИ.

#Коллекция

#Обзор

Коллекция используется для определения моделей данных в системе, таких как имена моделей, поля, индексы, связи и другая информация. Обычно она вызывается через метод collection экземпляра Database в качестве точки входа-прокси.

const { Database } = require('@nocobase/database')

// Создаем экземпляр базы данных
const db = new Database({...});

// Определяем модель данных
db.collection({
  name: 'users',
  // Определяем поля модели
  fields: [
    // Скалярное поле
    {
      name: 'name',
      type: 'string',
    },

    // Поле связи
    {
      name: 'profile',
      type: 'hasOne' // 'hasMany', 'belongsTo', 'belongsToMany'
    }
  ],
});

Больше типов полей смотрите в разделе Поля.

#Конструктор

Сигнатура

  • constructor(options: CollectionOptions, context: CollectionContext)

Параметры

ПараметрТипЗначение по умолчаниюОписание
options.namestring-Идентификатор коллекции
options.tableName?string-Имя таблицы в базе данных. Если не указано, будет использоваться значение options.name.
options.fields?FieldOptions[]-Определения полей. Подробности смотрите в разделе Поле.
options.model?string | ModelStatic<Model>-Тип модели Sequelize. Если используется string, имя модели должно быть предварительно зарегистрировано в базе данных.
options.repository?string | RepositoryType-Тип репозитория. Если используется string, тип репозитория должен быть предварительно зарегистрирован в базе данных.
options.sortable?string | boolean | { name?: string; scopeKey?: string }-Конфигурация поля для сортировки данных. По умолчанию сортировка не применяется.
options.autoGenId?booleantrueАвтоматически генерировать уникальный первичный ключ. По умолчанию true.
context.databaseDatabase-Экземпляр базы данных в текущем контексте.

Пример

Создание коллекции постов:

const posts = new Collection(
  {
    name: 'posts',
    fields: [
      {
        type: 'string',
        name: 'title',
      },
      {
        type: 'double',
        name: 'price',
      },
    ],
  },
  {
    // Существующий экземпляр базы данных
    database: db,
  },
);

#Члены экземпляра

#options

Начальные параметры конфигурации коллекции. Совпадают с параметром options конструктора.

#context

Контекст, к которому принадлежит текущая коллекция; в настоящее время это в основном экземпляр базы данных.

#name

Имя коллекции.

#db

Экземпляр базы данных, к которому она принадлежит.

#filterTargetKey

Имя поля, используемого в качестве первичного ключа.

#isThrough

Является ли это промежуточной коллекцией.

#model

Соответствует типу модели Sequelize.

#repository

Экземпляр репозитория.

#Методы конфигурации полей

#getField()

Получает объект поля с соответствующим именем, определенный в коллекции.

Сигнатура

  • getField(name: string): Field

Параметры

ПараметрТипЗначение по умолчаниюОписание
namestring-Имя поля

Пример

const posts = db.collection({
  name: 'posts',
  fields: [
    {
      type: 'string',
      name: 'title',
    },
  ],
});

const field = posts.getField('title');

#setField()

Устанавливает поле для коллекции.

Сигнатура

  • setField(name: string, options: FieldOptions): Field

Параметры

ПараметрТипЗначение по умолчаниюОписание
namestring-Имя поля
optionsFieldOptions-Конфигурация поля. Подробности смотрите в разделе Поле.

Пример

const posts = db.collection({ name: 'posts' });

posts.setField('title', { type: 'string' });

#setFields()

Массово устанавливает несколько полей для коллекции.

Сигнатура

  • setFields(fields: FieldOptions[], resetFields = true): Field[]

Параметры

ПараметрТипЗначение по умолчаниюОписание
fieldsFieldOptions[]-Конфигурация полей. Подробности смотрите в разделе Поле.
resetFieldsbooleantrueСбрасывать ли существующие поля.

Пример

const posts = db.collection({ name: 'posts' });

posts.setFields([
  { type: 'string', name: 'title' },
  { type: 'double', name: 'price' },
]);

#removeField()

Удаляет объект поля с соответствующим именем, определенный в коллекции.

Сигнатура

  • removeField(name: string): void | Field

Параметры

ПараметрТипЗначение по умолчаниюОписание
namestring-Имя поля

Пример

const posts = db.collection({
  name: 'posts',
  fields: [
    {
      type: 'string',
      name: 'title',
    },
  ],
});

posts.removeField('title');

#resetFields()

Сбрасывает (очищает) поля коллекции.

Сигнатура

  • resetFields(): void

Пример

const posts = db.collection({
  name: 'posts',
  fields: [
    {
      type: 'string',
      name: 'title',
    },
  ],
});

posts.resetFields();

#hasField()

Проверяет, определен ли в коллекции объект поля с соответствующим именем.

Сигнатура

  • hasField(name: string): boolean

Параметры

ПараметрТипЗначение по умолчаниюОписание
namestring-Имя поля

Пример

const posts = db.collection({
  name: 'posts',
  fields: [
    {
      type: 'string',
      name: 'title',
    },
  ],
});

posts.hasField('title'); // true

#findField()

Находит в коллекции объект поля, соответствующий заданным критериям.

Сигнатура

  • findField(predicate: (field: Field) => boolean): Field | undefined

Параметры

ПараметрТипЗначение по умолчаниюОписание
predicate(field: Field) => boolean-Критерии поиска

Пример

const posts = db.collection({
  name: 'posts',
  fields: [
    {
      type: 'string',
      name: 'title',
    },
  ],
});

posts.findField((field) => field.name === 'title');

#forEachField()

Перебирает объекты полей в коллекции.

Сигнатура

  • forEachField(callback: (field: Field) => void): void

Параметры

ПараметрТипЗначение по умолчаниюОписание
callback(field: Field) => void-Функция обратного вызова

Пример

const posts = db.collection({
  name: 'posts',
  fields: [
    {
      type: 'string',
      name: 'title',
    },
  ],
});

posts.forEachField((field) => console.log(field.name));

#Методы конфигурации индексов

#addIndex()

Добавляет индекс к коллекции.

Сигнатура

  • addIndex(index: string | string[] | { fields: string[], unique?: boolean,[key: string]: any })

Параметры

ПараметрТипЗначение по умолчаниюОписание
indexstring | string[]-Имя(имена) поля(полей) для индексирования.
index{ fields: string[], unique?: boolean, [key: string]: any }-Полная конфигурация.

Пример

const posts = db.collection({
  name: 'posts',
  fields: [
    {
      type: 'string',
      name: 'title',
    },
  ],
});

posts.addIndex({
  fields: ['title'],
  unique: true,
});

#removeIndex()

Удаляет индекс из коллекции.

Сигнатура

  • removeIndex(fields: string[])

Параметры

ПараметрТипЗначение по умолчаниюОписание
fieldsstring[]-Комбинация имен полей для удаляемого индекса.

Пример

const posts = db.collection({
  name: 'posts',
  fields: [
    {
      type: 'string',
      name: 'title',
    },
  ],
  indexes: [
    {
      fields: ['title'],
      unique: true,
    },
  ],
});

posts.removeIndex(['title']);

#Методы конфигурации коллекции

#remove()

Удаляет коллекцию.

Сигнатура

  • remove(): void

Пример

const posts = db.collection({
  name: 'posts',
  fields: [
    {
      type: 'string',
      name: 'title',
    },
  ],
});

posts.remove();

#Методы работы с базой данных

#sync()

Синхронизирует определение коллекции с базой данных. Помимо стандартной логики Model.sync в Sequelize, этот метод также обрабатывает коллекции, соответствующие полям связей.

Сигнатура

  • sync(): Promise<void>

Пример

const posts = db.collection({
  name: 'posts',
  fields: [
    {
      type: 'string',
      name: 'title',
    },
  ],
});

await posts.sync();

#existsInDb()

Проверяет, существует ли коллекция в базе данных.

Сигнатура

  • existsInDb(options?: Transactionable): Promise<boolean>

Параметры

ПараметрТипЗначение по умолчаниюОписание
options?.transactionTransaction-Экземпляр транзакции

Пример

const posts = db.collection({
  name: 'posts',
  fields: [
    {
      type: 'string',
      name: 'title',
    },
  ],
});

const existed = await posts.existsInDb();

console.log(existed); // false

#removeFromDb()

Сигнатура

  • removeFromDb(): Promise<void>

Пример

const books = db.collection({
  name: 'books',
});

// Синхронизируем коллекцию книг с базой данных
await db.sync();

// Удаляем коллекцию книг из базы данных
await books.removeFromDb();