Метеор Монго коллекция Touch

Я хотел бы знать, могу ли я выполнить такую ​​операцию, как "прикосновение" к монго-документам в Метеоре.

я использую aldeed:collection2 пакет для проверки схемы базы данных. Недавно добавив несколько новых полей со значениями по умолчанию, мне нужно выполнить миграцию в моей базе данных.

Вместо того, чтобы писать отдельные миграции для каждого нового поля, я планирую коснуться всех документов, чтобы значение по умолчанию, определенное с помощью aldeed:simple-schema прилагаются к документам.

Есть ли сенсорная операция? Как я могу продолжить?

1 ответ

Решение

Просто переберите каждый документ в вашей коллекции, validateи обновить. Это эффективно "касается" каждого документа. Производительность не должна беспокоить вас, поскольку это однократная миграция. Шаги:

  1. Подтвердите документ с помощью SimpleSchema validate(doc) который автоматически применяется defaultValueс до документа
  2. collection.update(doc)

Вот пример реализации.

collection.find().forEach(function(doc) {
  MySchema.namedContext("myContext").validate(doc);
  collection.update({_id: doc._id}, doc);
});

Это должно сделать это!


Примечание. Чтобы воспользоваться преимуществами SimpleSchema, вам, очевидно, придется запускать этот код из контекста Meteor (не mongo), что может быть непросто сделать в производственной среде. Таким образом, вы могли бы написать эту миграцию как метод на стороне сервера, который вы вызываете из клиента (обязательно защитите его) или из оболочки Meteor, если, в зависимости от вашей реализации, он у вас есть.

Другие вопросы по тегам