我正在尝试使模式中的所有查找调用都不区分大小写。这是我到目前为止所得到的:
const user = new new mongoose.Schema({
username: {
trim: true,
required: true,
type: String,
match : [
new RegExp('^[a-z0-9_.-]+$', 'i'),
'{PATH} \'{VALUE}\' invalid'
],
validate : [
(username, callback) => {
console.log(username);
user.findOne({ username: new RegExp(`/^${username}$/i`) }, (err, doc) => {
if(!doc) return callback(false);
return callback(true);
});
},
'Username already exists'
]
});
我做错了什么?
答案 0 :(得分:1)
我设法让这个工作通过中间件:
user.pre('find', function() {
if (this._conditions.username) {
this._conditions.username = new RegExp(this._conditions.username.replace(/\./g, '\\\\.'), 'i');
}
});
答案 1 :(得分:0)
您可以通过在创建mongoose.Schema的新实例时定义mongoDb称为排序规则https://docs.mongodb.com/manual/core/index-case-insensitive/的方式来使模式不敏感。
var someSchema = new mongoose.Schema({
username: {type: String, required: true}
}, {
collation: { locale: 'en', strength: 2 }
});
现在,您已在模式级别应用了不区分大小写的逻辑,该逻辑将在查询该模式的模型时反映并使用。
someModel.findOne({username: 'UsERName1'})
由于您在模型对应的模式上进行排序,因此上述查询现在变为不区分大小写。