Мангуст исключает результаты документа на уровне схемы

#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 пропускает неактивных пользователей