У меня есть следующая модель 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"