Схема моей учетной записи
export const AccountSchema: Schema = new Schema({
email: {
index: true,
select: true,
unique: true,
required: true,
type: String,
trim: true,
lowercase: true
},
password: {
index: false,
select: false,
unique: false,
required: true,
type: String,
set: (val) => obfuscatePassword(val)
},
accountType: {
index: false,
select: true,
unique: false,
required: true,
type: String,
trim: true,
validate: validateUserType,
},
status: {
index: false,
select: true,
unique: false,
required: true,
type: String,
trim: true,
validate: validateStatus,
},
profile: {
type: Schema.Types.ObjectId,
refPath: 'accountType',
required: false
},
activationToken: {
index: false,
select: false,
unique: false,
required: false,
type: String,
trim: true,
lowercase: false,
uppercase: false
}
},
{
timestamps: true
}
);
Свойство профиля относится к одному из 3 возможных типов профилей для каждого типа учетной записи, но все они имеют следующие свойства.
export const ProfileSchema: Schema = new Schema({
firstName: {
index: false,
select: true,
unique: false,
required: true,
type: String,
trim: true,
lowercase: false,
uppercase: false
},
lastName: {
index: false,
select: true,
unique: false,
required: true,
type: String,
trim: true,
lowercase: false,
uppercase: false
},
avatar: {
index: false,
select: true,
unique: false,
required: false,
type: String,
trim: true,
lowercase: false,
uppercase: false
}
},
{
timestamps: true
}
);
Я хочу создать запрос, чтобы найти все учетные записи, которые в полях email, profile.firstName и profile.lastName соответствуют регулярному выражению, и исключая те, которые имеют accountType: NONE
I пытался сделать что-то вроде этого:
const rows: any[] = await Model
.find({}, fields)
.populate({
path: 'profile', match: {
$or: [
{ firstName: { $regex: search } },
{ lastName: { $regex: search } }
]
}
})
.limit(50)
.or([
{ email: regex, accountType: { $ne: AccountType.NONE } }
])
.exec();
но у меня нет ожидаемого результата