我正在实施某种缓存,以便我找到'查询某些模式,我的缓存使用pre \ post查询挂钩。
问题是如何取消发现'正确查询?
mySchema.pre('find', function(next){
var result = cache.Get();
if(result){
//cancel query if we have a result from cache
abort();
} else {
next();
}
});
这样的承诺能够实现吗?
Model.find({..})
.select('...')
.then(function (result) {
//We can reach here and work with the cached results
});
答案 0 :(得分:1)
我无法找到一个合理的解决方案来解决另一个非缓存原因,但如果您自己的特定缓存方法不太重要,我建议您查看mongoose-cache,效果很好并且很简单设置由于它的依赖性:node-lru-cache,请检查以获取更多选项。
答案 1 :(得分:0)
您可能想要查看mongoose验证器,这似乎是处理控制是否创建对象的更好方法。
您可以创建一个自定义验证函数,该函数将在Model.save函数中引发错误,从而导致其失败。以下是文档中的代码段:
// make sure every value is equal to "something"
function validator (val) {
return val == 'something';
}
new Schema({ name: { type: String, validate: validator }});
// with a custom error message
var custom = [validator, 'Uh oh, {PATH} does not equal "something".']
new Schema({ name: { type: String, validate: custom }});
// adding many validators at a time
var many = [
{ validator: validator, msg: 'uh oh' }
, { validator: anotherValidator, msg: 'failed' }
]
new Schema({ name: { type: String, validate: many }});
// or utilizing SchemaType methods directly:
var schema = new Schema({ name: 'string' });
schema.path('name').validate(validator, 'validation of {PATH} failed with value {VALUE}');
如果您想更多地了解它,请在此处找到。希望能帮助别人!
http://mongoosejs.com/docs/api.html#schematype_SchemaType-validate