Найти в текущей коллекции свойства и заполненные свойства в одном запросе - PullRequest
0 голосов
/ 19 февраля 2020

Схема моей учетной записи

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();

но у меня нет ожидаемого результата

...