2014-09-15 4 views
3

Я хочу, чтобы автоматически добавить параметр запроса для всех запросов, связанных для конкретной модели мангустов, не затрагивая другие моделиПерекрытие запроса мангуст для конкретной модели

Я видел это answer где Mongoose.Query пропатчен, и это будет влиять на все модели мангуста.

ответ

2

Я вижу два возможных простых способов сделать это:

Альтернатива # 1

Добавление статического Dict с параметрами, которые вы хотите применить к конкретной Mongoose схеме:

FooSchema.statics.options = { 
    ... 
}; 

Теперь, когда вы запрашиваете, что нужно сделать:

Foo.find({}, null, Foo.options, function(err, foos) { 
    ... 
}); 

Вариант № 2

Реализовать оболочку для метода находят, что всегда использует свои специфические параметры:

FooSchema.statics.findWithOptions = function(query, next) { 
    var options = { ... }; 
    this.find(query, null, options, next); 
}; 

и использовать этот метод, как так:

Foo.findWithOptions({}, function(err, foos) { 
    ... 
}) 

переиспользуемости

Чтобы сделать эти методы обертки более многоразовыми, y ожно сделать Dict со всеми вашими оберток:

var withOptionsWrappers = { 
    findWithOptions: function(query, next) { 
     this.find(query, null, this.options, next); 
    }, 
    findByIdWithOptions: ... 
    findOneWithOptions: ... 
    ... 
}; 

Поскольку мы ссылаемся на this не будет никаких проблем повторно использовать это. И теперь это можно применить ко всем вашим схемам вместе с вашей схемой конкретными вариантами:

FooSchema.statics = withOptionsWrappers; 
FooSchema.statics.options = { 
    ... 
}; 
BarSchema.statics = withOptionsWrappers; 
BarSchema.statics.options = { 
    ... 
}; 
+0

Спасибо за ответ, но на самом деле я хочу, чтобы добавить эту опцию для всех запросов (найти, findById, обновление, удаление ...), поэтому мне нужно, чтобы создать оболочку для каждого запроса для каждой модели! – eyadof

+0

@eyadof добавил раздел в моем ответе, в котором дается предложение о том, как его можно повторно использовать. –

1

Я был в состоянии сделать это для моих мягких удаленных элементов. Тем не менее, я еще не тестировал его.

function findNotDeletedMiddleware(next) { 
    this.where('deleted').equals(false); 
    next(); 
} 

MySchema.pre('find', findNotDeletedMiddleware); 
MySchema.pre('findOne', findNotDeletedMiddleware); 
MySchema.pre('findOneAndUpdate', findNotDeletedMiddleware); 
MySchema.pre('count', findNotDeletedMiddleware); 
Смежные вопросы