Метеор Монго коллекция Touch
Я хотел бы знать, могу ли я выполнить такую операцию, как "прикосновение" к монго-документам в Метеоре.
я использую aldeed:collection2
пакет для проверки схемы базы данных. Недавно добавив несколько новых полей со значениями по умолчанию, мне нужно выполнить миграцию в моей базе данных.
Вместо того, чтобы писать отдельные миграции для каждого нового поля, я планирую коснуться всех документов, чтобы значение по умолчанию, определенное с помощью aldeed:simple-schema
прилагаются к документам.
Есть ли сенсорная операция? Как я могу продолжить?
1 ответ
Просто переберите каждый документ в вашей коллекции, validate
и обновить. Это эффективно "касается" каждого документа. Производительность не должна беспокоить вас, поскольку это однократная миграция. Шаги:
- Подтвердите документ с помощью SimpleSchema
validate(doc)
который автоматически применяетсяdefaultValue
с до документа collection.update(doc)
Вот пример реализации.
collection.find().forEach(function(doc) {
MySchema.namedContext("myContext").validate(doc);
collection.update({_id: doc._id}, doc);
});
Это должно сделать это!
Примечание. Чтобы воспользоваться преимуществами SimpleSchema, вам, очевидно, придется запускать этот код из контекста Meteor (не mongo), что может быть непросто сделать в производственной среде. Таким образом, вы могли бы написать эту миграцию как метод на стороне сервера, который вы вызываете из клиента (обязательно защитите его) или из оболочки Meteor, если, в зависимости от вашей реализации, он у вас есть.