Правильный способ создания коллекции во время пн goose транзакции - PullRequest
3 голосов
/ 26 мая 2020

Как автоматически создать коллекцию во время транзакции mon goose, если коллекция еще не была создана?

Мне известно об ограничении mon goose, которое ограничивает пользователя создавать (или удалять) mon goose коллекции во время сеанса открытой транзакции.

Кроме того, я смог найти 3 возможных решения, как это исправить:
1. autoCreate вариант
2. Model.init() метод
3. Model.createCollection() метод

Какой использовать? Без потери индексов et c.

app.models.ts

import { model, Schema } from 'mongoose';

const UserSchema = new Schema<UserDocument>({
  name: {
    type: Schema.Types.String,
    required: true,
  }
}); // { autoCreate: true } <-- ???

export const UserModel = model<UserDocument>('User', UserSchema);

app.ts

import { startSession } from 'mongoose';

import { UserModel } from './app.models.ts'; 


async function createUser() { 
  // await UserModel.createCollection(); ??
  // or 
  // await UserModel.init(); ??

  const session = await startSession();
  sesssion.startTransaction();

  try {
    const [user] = await UserModel.create([{ name: 'John' }], { session });

    await session.commitTransaction();

    return user;
  } catch (error) {
    await session.abortTransaction();
  } finally {
    session.endSession()
  }
}

foo();

1 Ответ

0 голосов
/ 26 мая 2020

Если коллекция не существует, MongoDB создает коллекцию, когда вы впервые сохраняете данные для этой коллекции. Вы также можете явно создать коллекцию с различными параметрами, такими как установка максимального размера или правила проверки документации.

В любом случае, mon goose заботится об индексах, коллекции и т. Д. c. .. вам просто нужно указать имя коллекции: https://mongoosejs.com/docs/guide.html#collection

const UserSchema = new Schema<UserDocument>({
  name: {
    type: Schema.Types.String,
    required: true,
  }
}, {collection: 'users'});

Есть ответ о транзакциях и создании коллекции - https://github.com/Automattic/mongoose/issues/6699

На самом деле, я использую пакет https://www.npmjs.com/package/db-migrate для создания коллекций и индексов перед запуском приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...