Я бы не удалял удаление любого дополнительного документа, поэтому я добавил ошибку в промежуточное ПО pre ('remove') каждой схемы дополнительного документа.Предварительно удалите промежуточное программное обеспечение Mongoose
При вызове функции .remove() он эффективно вызывает промежуточное программное обеспечение. Но когда он удаляется без вызова remove(), промежуточное программное обеспечение не проверяет, было ли оно удалено.
Случаи, когда дело касается того, когда я получаю объект из удаленного источника, я хотел бы выполнить все проверки целостности через посреднические посредники, чтобы сохранить все в одном месте. Удаленный источник может по ошибке или не удалять один из вспомогательных документов. Поэтому, когда Mongoose проверяет весь документ, суб-документ уже удален, не вызывая функцию .remove().
Вот минимальный рабочий пример моей проблемы:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var subDateSchema = new Schema({
date_add: {type: Date, default: Date.now},
date_remove: {type: Date, default: null}
});
var ResourceSchema = new Schema({
activation_dates: [subDateSchema]
});
subDateSchema.pre('remove', function(next){
next(new Error("YOU CAN'T DELETE ANY ACTIVATION DATE"));
});
var Resource = mongoose.model('Resource', ResourceSchema);
var newresource = new Resource({
activation_dates: [{
date_add: Date.now()
}]
});
newresource.save(function(err){
if(err) throw err;
newresource.activation_dates.splice(0, 1);
/**
* Here I tried
* newresource.markModified('activation_dates');
* On update it *DOES* trigger pre save and pre validate
* But it does nothing to deleted content
**/
newresource.save(function(err){
if(err) throw err;
});
});
Так что мой вопрос: Есть ли чистый способ вызова подменю док удаления промежуточного программного не прибегая для проверки всех предыдущих элементов и сравнить с какие из них удаляются?
«Поддокументы» и, следовательно, «члены массивов» ** никогда не «удаляются», как предполагает подсказка. Они только «вытягиваются» из массива. Вот почему ваш код не работает. –
@BlakesSeven в порядке, так есть ли способ проверить, что вспомогательные документы вытягиваются из массива? – Musinux
Подумайте об этом, я на самом деле не думаю, что модели мангуста поддерживают это вообще. Возможность даже «поддерживать» процесс «проверки» на «атомарных» операциях, таких как '$ pull' в' .update() 'или подобном, также является относительно« новой »вещью в кодовой базе. Поэтому я бы рекомендовал, чтобы более подходящим было использование «проверки правильности», а не промежуточного программного обеспечения .pre(). Не пробовал сам процесс. Можете попробовать в выходные дни. –