2017-03-07 12 views
0

mongoose SubDocumentsを再帰的に使用できますか?モンゴースのサブ文書の可能な奥行き

var Player = { 
    city: { 
    energy: { 
     solar: 20, 
     fusion: 0 
    } 
    } 
}; 

と対応するスキーマ: 私は、このオブジェクト持って

var PlayerSchema = new Schema({ 
    city: CitySchema 
}); 
PlayerSchema.pre('save', function(next){ 
    this.city = {}; 
}); 

var EnergySchema = new mongoose.Schema({ 
    solar: {type: Number, default: 0}, 
    fusion: {type: Number, default: 0} 
}); 

var CitySchema = new mongoose.Schema({ 
    last_update: { type: Date, default: Date.now }, 
    energy: EnergySchema 
}); 

CitySchema.pre('save', function (next) { 
    this.energy = {}; 
}); 

をしかし、このオブジェクトを保存することは、エネルギーなしで唯一の都市を節約できます。 (コマンドthis.city = {};PlayerSchema.pre('save', ...)がデフォルト値ではなく、都市の未定義のエネルギー属性につながるノート方法CitySchema.pre('save', ...)に取ることなくCitySchemaからオブジェクトを作成している時に。)

私がのObjectIdを通じて参照を投入して作っ避けたいです。

サブオブジェクトだけでPlayerオブジェクトを保存することはできますか?

答えて

0

あなたはここで、空の対象となる都市を定義しているので:それが正常に動作する必要があること以外は

PlayerSchema.pre('save', function(next){ 
    console.log(this.city); //Should be { energy: { solar, fusion }} 
    this.city = {}; 
    console.log(this.city); //Now {} 
}); 

+0

'this.city = {};'の後のPlayerでは、mongooseはスキーマのデフォルト値で新しいCityを正しく作成します。後者の 'console.log'の出力は' {lastUpdate: '2017-03-08 ...'} 'となります。問題は、この属性 'EnergySchema from CitySchema'が欠落していることです。メソッド 'CitySchema.pre(' save '、...);がPlayerSchema.pre(' save '、...の間に呼び出されないためです。 ); ' – James07

関連する問題