MMO 실시간 브라우저 게임을하고 있고 몽구스 (MongoDB)를 사용하여 데이터를 저장하고 있습니다.몽구스로 자바 스크립트 개체를 저장할 수 없습니다.
var playerSchema = new Schema({ name: { type: String, required: true, trim: true, index: { unique: true } }, resources: { wood: { type: Number, required: true, default: 500}, stone: { type: Number, required: true, default: 300}, iron: { type: Number, required: true, default: 0}, cereal: { type: Number, required: true, default: 0} }, resourcesPerHour: { 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: []}, buildings: { type: Array, required: true, default: []}, researches: { type: Array, required: true, default: []} });
당신이 볼 수 있듯이, res
, buildings
및 researches
가 배열 인 : 모든
첫째, 난 당신에게 내 객체의 구조를 보여 드리겠습니다. 나는 야 쇼 당신은 그들 중 하나 (모두 동일한 구조를 가지고) 있어요 :
var buildingSchema = new Schema({ id: {type: String, requried: true}, name: { type: String, required: true, trim: true, index: { unique: true } }, level: { type: Number, required: true, default: 0}, scalingValue: {type: Number, required: true, default: 2}, costs: { wood: { type: Number, required: true, default:0}, stone: { type:Number, required:true, default:0}, iron: {type:Number, required:true, default:0}, cereal: {type:Number, required:true, default:0} } });
OK, 모든 데이터가 initializated와 내가 선수를 상상한다. 업데이트를 시도 할 때 목록에서 정보 만 업데이트 할 수 있습니다. 이 예제를보세요 :
player.findOne({name:req.session.name}, function(err, doc){ doc.resources.wood -= 200; doc.buildings[id%100].costs.wood *= 2; doc.save(function(err){ if(err)console.log(err); }); }
나는 데이터베이스 모델을 보면
, 그것은 단지resources.wood
아닌
building[i].costs.wood
저장됩니다. 왜 실패하는지 알 수는 없지만 배열 내의 모든 객체는
new variable
을 사용하여 생성됩니다.
variable
은 스키마 (예 :
buildingSchema
)입니다.
한 가지만 더 말씀 드리면 doc.save()
앞에 console.log(doc.buildings[i].costs.wood);
을 추가 했으므로 괜찮습니다. 즉, 모든 데이터가 잘 수정되었음을 의미하지만, doc.save
에서는 '목록에없는'데이터 만 저장합니다.
EDIT : console.log(err);
은 아무것도 인쇄하지 않으므로 저장 기능이 작동했습니다. 배열 안에없는
감사합니다. doc.markModified()는 매력처럼 작동했습니다. – Neoares