在Mongoose模式验证

时间:2016-01-29 19:47:47

标签: node.js mongodb validation mongoose mongoose-schema

我尝试以一种projects集合和一个people集合的方式设置我的MongoDB设计。 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 {1}}由同一项目引用的文档,也是一名经理。

知道哪个项目引用了这个文档不是问题,我会在某个地方,我只需要知道如何运行查询..这可能吗?

1 个答案:

答案 0 :(得分:1)

通过使用Mongooses Middleware功能,我能够达到预期的效果。在pre-save hook内设置验证工作得很好