gpt4 book ai didi

javascript - 无法使用 Mongoose 保存 JavaScript 对象

转载 作者:可可西里 更新时间:2023-11-01 09:58:05 24 4
gpt4 key购买 nike

我正在做一个 MMO 实时浏览器游戏,我正在使用 Mongoose (MongoDB) 存储数据。

首先,我将向您展示我的对象的结构:

var playerSchema = new Schema({
名称:{ 类型:字符串,要求:真, trim :真,索引:{唯一:真}},
资源: {
wood: { type: Number, required: true, default: 500},
stone: { type: Number, required: true, default: 300},
iron: { type: Number, required: true, default: 0},
Cereal :{类型:数字,必需:真,默认值:0}
},
资源每小时:{
woodPerHour: { type: Number, required: true, default: 40},
stonePerHour: { type: Number, required: true, default: 20},
ironPerHour: { type: Number, required: true, default: 0},
},
res: {type: Array, required:true, default: []},
建筑物:{类型:数组,必需:true,默认值:[]},
研究:{ 类型:数组,必需:true,默认值:[]}
});

如您所见,resbuildingsresearches 是数组。我将向您展示其中一个(它们都具有相同的结构):

var buildingSchema = new Schema({
id: {type: String, requried: true},
名称:{ 类型:字符串,要求:真, trim :真,索引:{唯一:真}},
level: { type: Number, required: true, default: 0},
scalingValue: {type: Number, required: true, default: 2},
费用:{
wood: { type: Number, required: true, default:0},
石头:{ type:Number, required:true, default:0},
铁:{type:Number, required:true, default:0},
麦片:{type:Number, required:true, default:0}
}
});

好吧,假设我有一个播放器,所有数据都已初始化。当我尝试更新某些内容时,我只能更新该列表之外的信息。看这个例子:

player.findOne({name:req.session.name}, function(err, doc){
doc.resources.wood -= 200;
doc.buildings[id%100].costs.wood *= 2;
文档保存(函数(错误){
如果(错误)console.log(错误);
});
}

当我在数据库中查看模型时,它只存储了 resources.wood,而不是 building[i].costs.wood。我不知道为什么会失败,但是数组中的所有对象都是使用 new variable 创建的,其中 variable 是一个架构(如 buildingSchema).

还有一件事,我在 doc.save() 之前添加了一个 console.log(doc.buildings[i].costs.wood); 并且它是好的。所以这意味着所有数据都已修改好,但在 doc.save 中它只保存“不在列表中”的数据。

编辑:console.log(err); 没有打印任何内容,所以这意味着保存功能有效。

最佳答案

当您在架构中使用 Array 类型时(与 docs 中的 Mixed 类型相同),您需要显式地将字段标记为已修改或 Mongoose不会保存您对其所做的任何更改。

doc.markModified('buildings');
doc.save(function(err){
if(err)console.log(err);
});

更好的方法可能是将 buildings 声明为包含 buildingSchema 的数组:

buildings: [buildingSchema],

这样 Mongoose 将能够自动跟踪您对 buildings 数组所做的更改。

关于javascript - 无法使用 Mongoose 保存 JavaScript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23278877/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com