在 mongoose Schema 中,如何一次声明具有相同 sub-properties 的多个属性?

In a mongoose Schema, how can I declare multiple properties with the same sub-properties at once?

我有一个 RPG 类型角色的装备槽列表 sheet。每个插槽都有一个类型,如“head”或“body”,每个插槽都有一个 object 代表角色佩戴的物品。每件设备都会有相同的变量类型(如下所示),但我不想单独写每一个,因为列表很长。有没有办法说“这些类型的设备中的每一种都会有这些变量”。下面是我的尝试,但它不起作用(说“head is undefined”)或者如果我删除 head(“body is undefined”)等

equipment: {
    head,
    body,
    legs,
    feet,
    shoulders,
    arms,
    hands,
    back,
    ringLeft,
    ringRight,
    neck,
    rightHand,
    leftHand,
    ammunition: {
      default: {
        name: {
          type: String,
          default: "Empty"
        },
        Type: {
          type: String,
          default: ""
        },
        subType: {
          type: String,
          default: ""
        },
        handling: {
          type: String,
          default: ""
        },
        rarity: {
          type: String,
          default: ""
        },
        durability: {
          max: {
            type: Number,
            default: 0
          },
          current: {
            type: Number,
            default: 0
          }
        },
        damage: {
          min: {
            type: Number,
            default: 0
          },
          max: {
            type: Number,
            default: 0
          }
        },
        armorClass: {
          type: Number,
          default: 0
        },
        str: {
          type: Number,
          default: 0
        },
        dex: {
          type: Number,
          default: 0
        },
        int: {
          type: Number,
          default: 0
        },
        accuracy: {
          type: Number,
          default: 0
        },
        magicAccuracy: {
          type: Number,
          default: 0
        },
        magicDefense: {
          type: Number,
          default: 0
        },
        armorPiercing: {
          type: Number,
          default: 0
        },
        resistances: {
          fire: {
            type: Number,
            default: 0
          },
          ice: {
            type: Number,
            default: 0
          },
          lightning: {
            type: Number,
            default: 0
          },
          water: {
            type: Number,
            default: 0
          },
          earth: {
            type: Number,
            default: 0
          },
          wind: {
            type: Number,
            default: 0
          },
          light: {
            type: Number,
            default: 0
          },
          dark: {
            type: Number,
            default: 0
          }
        }
      }
   }
}

是的,您可以创建子架构。它只是一个普通的猫鼬模式,但您可以使用该模式声明属性,因此不必再次键入所有这些内容。 测试 所以.. 创建一个新架构:

const schema_equipmentAttributes = new Schema({
    name: {
        type: String,
        default: "Empty"
    },
    Type: {
        type: String,
        default: ""
    },
    subType: {
        type: String,
        default: ""
    }
});

然后你可以声明:

equipment: {
    head: { type: schema_equipmentAttributes },
    body: { type: schema_equipmentAttributes },
    legs: { type: schema_equipmentAttributes },
    feet: { type: schema_equipmentAttributes }
}

这应该是最简单的方法:)