Пн goose js проверка на нескольких полях подобъекта - PullRequest
1 голос
/ 14 апреля 2020

Я пытаюсь проверить весь объект (многоэлементные поля) в пределах 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 проверку на нескольких поля?

Спасибо

...