如何在' pre'中取消mongoose查询钩

时间:2015-07-28 08:25:47

标签: node.js mongodb mongoose

我正在实施某种缓存,以便我找到'查询某些模式,我的缓存使用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
        });

2 个答案:

答案 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