所以正如标题所说,我希望猫鼬自动为我在数组中推送的对象添加一个_id字段。
这是我的猫鼬模式:
var playerModel = new Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
ref: "Users",
},
class: {
type: String,
required: true,
},
level: {
type: Number,
default: 1,
},
spells: {
type: [String],
default: ["", "", "", "", ""],
},
inventory: [],
toolbelt: {
axe: [{}],
pickaxe: [{}],
fishingrod: [{}],
hammer: [{}],
saw: [{}],
sewingkit: [{}],
knife: [{}],
gemkit: [{}],
food: [{}],
potion: [{}],
},
gear: {
weapon: [{}],
head: [{}],
chest: [{}],
gloves: [{}],
legs: [{}],
shoes: [{}],
earrings: [{}],
ring: [{}],
necklace: [{}],
},
gold: {
type: Number,
default: 0,
},
bagSize: {
type: Number,
default: 20,
},
skills: {
type: [userSkills],
default: defaultSkills,
},
});
所以最终,当我将一个新项目推送到我的play.库存时,我希望猫鼬自动添加_id,但它没有。同样在我的模式中,我将库存定义为一个数组,以便我可以将不具有相同结构的不同对象推送到其中。
所以每当我这么做的时候
player.inventory.push(player.toolbelt.pickaxe[0]);
我希望我的项目有它的所有属性从我插入的,也是一个_id属性自动生成。
现在它在我的数据库中看起来像这样:我的MongoDB字段的图像
希望我被清除,有人可以帮助我:)
谢谢你们!
对于将来的任何人,我通过创建一个将严格选项设置为false的新模式来解决我的问题:
var inventoryItem = new Schema({}, { strict: false });
然后说库存是:
inventory: [inventorySchema],
出于某种原因,这是有效的,但不是这样的:
inventory: [{}, { strict: false }],
很高兴知道!:)
日安!