Mongoose子文档可能的深度

时间:2017-03-07 20:14:41

标签: mongoose odm

我可以递归使用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 = {};
});

但保存此对象只能节省没有能量的城市。 (使用命令PlayerSchema.pre('save', ...) this.city = {};期间,使用默认值从CitySchema创建对象,但不会引入注释方法CitySchema.pre('save', ...),这会导致城市中未定义的能源属性。)

我想避免通过ObjectId填充和引用。

是否可以使用子文档保存Player对象?

1 个答案:

答案 0 :(得分:0)

由于您在此处将城市定义为空对象:

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

除此之外它应该可以正常工作。