#javascript #node.js #arrays #mongoose #nosql
#javascript #node.js #массивы #мангуст #nosql
Вопрос:
Я создаю модель для своих пользователей. У каждого пользователя есть свойство isVerified
, которое является логическим значением. Я хочу иметь возможность вызывать Model.find
модель мангуста и исключать все документы isVerified === false
без необходимости указывать это во время запроса. Я хочу установить его в схеме таким образом, чтобы при Model.find
каждом вызове эти документы автоматически исключались. Любая помощь приветствуется
Пользовательская модель:
const UserSchema:Schema = new Schema({
name: {
type: String,
required: true,
trim: true,
},
email: {
type: String,
required: true,
unique: true,
lowercase: true,
trim: true,
index: true,
validate: {
validator: (value:string) => validator.isEmail(value),
message: (props:any) => "Invalid Email Address"
},
},
password: {
type: String,
trim: true,
required: true,
select: false,
minlength: 6,
validate: {
validator: (value:string) => !validator.contains(value, "password"),
message: (props:any) => "Your password cannot contain the word 'password'"
}
},
phoneNumber: {
type: String,
trim: true,
required: true,
validate: {
validator: (value:string) => validator.isMobilePhone(value, 'any', {strictMode: true}),
message: (props:any) => "Please include country code (e.g. 233 for Ghana 44 for the United Kingdom) to phone number"
}
},
isActive: {
type: Boolean,
default: false
}
,
tokens: [
{
token: {
type: String,
required: true
}
}
]
},{
strict: "throw",
timestamps: true
})
Редактировать:
Я немного покопался, и, похоже, я могу перезаписать базовые методы, чтобы переопределить возвращаемый запрос. Я попытался сделать это, как показано ниже :
UserSchema.statics.find = function () {
let query = UserModel.find.apply(this, arguments);
query.where('isActive').ne(false)
return query;
}
Однако я получаю следующую ошибку
RangeError: Maximum call stack size exceeded
Ответ №1:
Наконец-то разобрался. Необходимо применить изменение к Model
объекту, а не к экземпляру UserModel
, как показано ниже:
UserSchema.statics.find = function () {
let query = Model.find.apply(this, arguments);
query.where('isActive').ne(false)
return query;
}
Теперь метод find пропускает неактивных пользователей