【问题标题】:How to create middlawere for mongoose queries如何为猫鼬查询创建中间件
【发布时间】:2017-07-05 22:24:54
【问题描述】:

我有旧版后端。这个后端使用猫鼬。有集合“用户”。此集合具有“电子邮件”字段。

我遇到了这个错误 - 电子邮件区分大小写。我想以小写形式保存所有新电子邮件。为此,我修改了“用户”架构:

email: {
    type: String,
    lowercase: true
}

但后端也有很多地方,比如:

user.find({email: some_case_unnormalized_email})

或者这个:

user.findOne({email: some_case_unnormalized_email})

我不想将这些地方修改为:

user.find({email: some_case_unnormalized_email.toLowerCase()})

相反,我想为“用户”架构创建一些中间件,例如:

UsersSchema.middleware('any_query', queryObject => {
    if (queryObject.email) {
        queryObject.email = queryObject.email.toLowerCase();
    }
});

怎么做?

【问题讨论】:

  • Mongoose 有一些关于他们的中间件生态系统的优秀文档mongoosejs.com/docs/middleware.html
  • 这不是我需要的,也没有示例如何替换查询参数
  • @DmitryNalyvaiko 寻找schema.pre('find', ...)
  • @robertklep 我不想使用 schema.pre('find, schema.pre('findOne 等。我想要类似 schema.pre('any_query
  • @DmitryNalyvaiko 与schema.pre('find', ...) 有何不同?

标签: node.js mongoose


【解决方案1】:

使用预保存挂钩修改任何属性

UserSchema.pre('find', function(next){
    var query = this;
    // console.log(JSON.stringify(query, null, 2));
    // update your query here
    next();
})

UserSchema.pre('findOne', function(next){
    var query = this;
    // console.log(JSON.stringify(query, null, 2));
    // update your query here
    next();
})

【讨论】:

  • 问题是关于查询,而不是保存。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-05
  • 2020-06-02
  • 2012-02-03
  • 2014-07-14
  • 2019-09-29
  • 2017-05-08
相关资源
最近更新 更多