在 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 }
}
这应该是最简单的方法:)
我有一个 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 }
}
这应该是最简单的方法:)