Nano Hash - криптовалюты, майнинг, программирование

Применить определенные ключи автозначения ко всем SimpleSchemas

У меня есть определенные ключи, такие как createdAt и updatedAt, которые должны быть определены во всех схемах. Есть ли способ избежать дублирования кода?

Я использую пакет SimpleSchema.

Мне нужен следующий код во всех моих Schemas.xxx

createdAt: {
    type: Date,
    optional: true,
    autoValue: function() {
        if (this.isInsert) {
            return new Date;
        } else if (this.isUpsert) {
            return {$setOnInsert: new Date};
        } else {
            this.unset();
        }
    },
    autoform: {
        type: 'hidden'
    }
},
updatedAt: {
    type: Date,
    optional: true,
    autoValue: function() {
        if (this.isUpdate) {
            return new Date();
        }
    },
    autoform: {
        type: 'hidden'
    }
}
20.05.2015

Ответы:


1

Создайте подсхему и затем включите ее в каждую коллекцию, обратите внимание, что конструктор SimpleSchema теперь принимает массив.

Schema._Basic = new SimpleSchema({
  userId: {
    type: String,
    optional: true
  },
  createdAt: {
    type: Date,
    label: 'Created at'
  },
  updatedAt: {
    type: Date,
    label: 'Updated at',
    optional: true
  },
  }
});

Schema.Client = new SimpleSchema([Schema._Basic,
  {
    address: {
      type: String
      optional: true
    }
  }
]);
20.05.2015
  • Это кажется мне хорошим решением. Любые плюсы/минусы использования этого решения по сравнению с использованием сборщиков? 21.05.2015
  • Сделайте оба! Создайте поле в своей схеме и вставьте его с помощью хуков коллекции. На самом деле не имеет значения, попадают ли данные вручную, через autoValue или через ловушку сбора. Лично я езжу вручную. autoValues ​​​​может содержать ошибки, и в некоторых случаях (например, логические значения предпочтений), когда я не хочу инициировать изменение в updatedAt. 21.05.2015

  • 2

    Я бы сделал это с помощью этого очень хорошего пакета: matb33:collection-hooks. добавить крючки до и после в свои коллекции. Таким образом, вы можете добавить поля createdAt и updatedAt следующим образом:

    Для ИмяКоллекции.insert();

    CollectionName.before.insert(function (userId, doc) {
        var currentDate = new Date();
        doc.createdAt = currentDate;
        doc.updatedAt = currentDate;    // could be also null if you want
    });
    

    Так что в приведенном выше примере всегда запускается непосредственно перед тем, как вставка вступит в силу. И это для CollectionName.update();

    CollectionName.before.update(function (userId, doc) {
        doc.updatedAt = new Date();
    });
    

    Это срабатывает всякий раз, когда вы обновляете свою коллекцию.

    20.05.2015
  • Может ли это быть более общим для всех коллекций? 20.05.2015
  • Прекрасно работает с CollectionHooks.defaults.before.all. 21.05.2015
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..