如何使用 Mongoose 强制嵌套 MongoDB 模式中序列字段的唯一性?

问题描述 投票:0回答:1

我正在开发一个项目,其中有三个 Mongoose 模式:文章、模块和课程。模块模式有一个文章数组,课程模式有一个模块数组,每个模块都有一个序列字段来确定顺序。我想确保序列字段在其各自的数组中是唯一的。但是,我在强制序列字段的唯一性方面遇到了困难。此给定代码不适用于此用例。

const articleSchema = new Schema({
    // ... (article schema fields)
});

const moduleSchema = new Schema({
    // ... (module schema fields)
    articles: [{
        article: {
            type: Schema.Types.ObjectId,
            ref: 'Article',
        },
        sequence: {
            type: Number,
            required: true,
            unique: true, // This doesn't seem to be working
        }
    }],
});

const courseSchema = new Schema({
    // ... (course schema fields)
    modules: [{
        module: {
            type: Schema.Types.ObjectId,
            ref: 'Module',
        },
        sequence: {
            type: Number,
            required: true,
            unique: true, // This also doesn't seem to be working
        },
    }],
    // ... (more course schema fields)
});


const Article = mongoose.model('Article', articleSchema);
const Module = model('Module', moduleSchema);
const Course = model('Course', courseSchema);
node.js mongodb mongoose mongoose-schema
1个回答
0
投票

const articleSchema = new Schema({
    // ... (article schema fields)
});

const moduleSchema = new Schema({
    // ... (module schema fields)
    articles: [{
        article: {
            type: Schema.Types.ObjectId,
            ref: 'article',
        },
        sequence: {
            type: Number,
            required: true,
        }
    }],
});

moduleSchema.index({ 'articles.sequence': 1 }, { unique: true, sparse: true });

const courseSchema = new Schema({
    // ... (course schema fields)
    modules: [{
        module: {
            type: Schema.Types.ObjectId,
            ref: 'module',
        },
        sequence: {
            type: Number,
            required: true,
        },
    }],
});

courseSchema.index({ 'modules.sequence': 1 }, { unique: true, sparse: true });

© www.soinside.com 2019 - 2024. All rights reserved.