Почему проверка в массиве схемы mon goose не работает? - PullRequest
0 голосов
/ 10 июля 2020

У меня есть следующая модель mon goose:

const collaboratorDetailsSchema = new mongoose.Schema({
    userId: {
        type: mongoose.SchemaTypes.ObjectId,
        ref: "User",
        required: true
    },
    stacks: {
        type: Array,
        required: true,
        default: undefined,
        validate: {
            validator: function (v) {
                return v.length > 0;
            },
            message: "Atleast one stack must be provided",
        },
    },
    experienceLevel: {
        type: Number,
        min: 1,
        max: 5,
        required: true,
    },
    note: {
        type: String,
    },
});

Затем я определил другую схему, которая содержит collaboratorDetailsSchema как массив.

const collaboratorSchema= new mongoose.Schema({
    projectId: {
        type: mongoose.SchemaTypes.ObjectId,
        ref: "Project",
        unique: true,
        required: true,
    },
    collaborators: [collaboratorDetailsSchema],
});

И, наконец, создан модель MongoDB следующим образом:

const Collaborator= mongoose.model("Collaborator", collaboratorSchema, "Collaborators");

Но когда я помещаю объекты sh в массив collaborators с помощью команды findByIdAndUpdate с $push, проверка required и пользовательская проверка, как определено в collaboratorDetailsSchema не применяются.

Это означает, что я могу сохранить следующий документ:

{
    "_id": ObjectId("5f07e8c91027230f2429a7b3"),
    "projectId": Objectid("5f07411154dd016500a8d585"),
    "collaborators": [
        {
            "_id": ObjectId("5f07e8c91027230f2429a7b4"),
            "stacks": [],
            "experienceLevel": 10,
            "note": "Sample Note"
        }
    ],
    "__v": 0
}

Это должно было привести к ошибке, потому что

  • userId отсутствует (required: true указано в схеме)
  • stacks - пустой массив (требуется минимум 1 элемент)
  • experienceLevel превышает максимальное значение 5

Я использую Postman для тестирования и "mongoose": "^5.9.20" и "express": "^4.17.1"

...