Я пытаюсь проверить весь объект (многоэлементные поля) в пределах mon goose.
У меня есть следующее определение пользовательской схемы:
module.exports.ItemQuantityPair = (ItemModel, strictStacking)=>{
return {
type: {
itemID: { type:Number, required:true },
quantity: { type:Number, min:1, default:1 },
},
validate: {
validator: async value => { //stacking
if(!strictStacking || value.quantity===1) //if no strict stacking, or only quantity of 1 don't validate
return true;
let item = await ItemModel.findOne({itemID:value.itemID}); //otherwise get the item and check if its stackable
if(!item.stackable)
return false; //invalid, quantity > 1 and not stackable
else
return true; //valid, quantity > 1 and stackable
},
message: props=>`${props.value} this item was supplied with a quantity larger than 1, but the item was found to not be stackable. Ensure only stackable items have quantity > 1`
},
}
}
Затем в моей схеме я используйте этот пользовательский объект, например, так:
const AccountSchema = new mongoose.Schema({
inventory: [ItemQuantityPair(ItemModel, true)] //inventory is a list of ItemQuantity pairs
});
Когда я пытаюсь это сделать, у меня появляется ошибка TypeError: Invalid schema configuration: 'undefined' is not a valid type within the array 'inventory'
Я предполагаю, что это потому, что я не могу присвоить объект полю type
, так как это единственные встроенные типы: https://mongoosejs.com/docs/schematypes.html#what -is-a-schematype . Обычно я проверяю каждое поле отдельно, но эта спецификационная проверка c требует, чтобы значения обоих полей (количество и itemID) были определены как действительные или нет.
Как выполнить чисто sh проверку на нескольких поля?
Спасибо