Выполнить запрос в проверке схемы Mongoose

Я пытаюсь настроить свой дизайн MongoDB таким образом, чтобы была коллекция projects и коллекция people. Схема модели Project содержит элемент _people, который ссылается на модель People. (В отличие от модели «Люди», в которой есть поле для ссылки на проект, к которому он принадлежит. Это должно быть так)

Мне нужно запускать проверку всякий раз, когда в контейнере people создается новый документ, что в проекте может быть только один менеджер. Это было бы очень легко, если бы я мог выполнить запрос для проверки элементов в схеме, но я не верю, что это возможно...

Вот схема для модели People на данный момент:

const peopleSchema = new Schema( {
    name: {
        type: Schema.Types.String,
        required: true,
        minlength: 3,
        maxlength: 25,
        trim: true,
        select: true
    },
    isManager: {
        type: Schema.Types.Boolean,
        default: false,
        validate: {
            validator: function ( v ) {
                // How can I check if there are any existing `people` documents with the 
                // `isManager` set to true, which are referenced by the same project.
                // If I can return a promise from here, then I can just execute a query and verify the results
            },
            message: 'There can be only one manager per each group'
        }
    }
})

Как вы можете видеть в функции isManager.validate.validator, я отметил, что если для этого документа isManager установлено значение true, мне нужно найти способ проверить, что еще нет документа person, на который ссылается тот же проект, который также является менеджером.

Знать, какой проект ссылается на этот документ, не проблема, я его где-нибудь найду, мне просто нужно знать, как выполнить запрос... возможно ли это?


person Justin    schedule 29.01.2016    source источник


Ответы (1)


Мне удалось добиться желаемого эффекта с помощью функциональности Mongooses Middleware. Настройка проверки внутри хука предварительного сохранения работала нормально.

person Justin    schedule 29.01.2016
comment
Как ты это сделал? Мой запрос просто висит внутри области действия хука, но отлично работает снаружи... - person Andrii M4n0w4R; 15.02.2021