2017-07-05 16 views
0
私は、次の保存したい

:あなたは、私は地域のオブジェクトを含むことができる領域オブジェクトを作成しようとしている見ることができるようにはマングース自己ネスティング

var TestSchema = new Schema({ 
    name: { 
     type: String 
    }, 
    regions: [RegionSchema] 
} 

var RegionSchema = new Schema({ 
    name: { 
     type: String 
    }, 
    minX: { 
     type: Number 
    }, 
    minY: { 
     type: Number 
    }, 
    minZ: { 
     type: Number 
    }, 
    maxX: { 
     type: Number 
    }, 
    maxY: { 
     type: Number 
    }, 
    maxZ: { 
     type: Number 
    }, 
    children: [this] 
}); 

が、しかし、これは例外なく、保存に失敗しますおそらく、スキーマ内の[this]は、何か無限ループか何かに詰まっているでしょう。

この方法を領域の入れ子にするにはどうすればよいですか?私は、このスキーマに送信するために期待できる

JSONペイロード:私は任意の助けに感謝

name: "test123", 
regions: [ 
     { 
      name: "TestRegion", 
      minX: 0, 
      minY: 0, 
      minZ: 0, 
      maxX: 100, 
      maxY: 255, 
      maxZ: 100, 
      children: [ 
       { 
        name: "TestRegionChild", 
        minX: 3, 
        minY: 3, 
        minZ: 3, 
        maxX: 97, 
        maxY: 252, 
        maxZ: 97, 
        children: [] 
       } 
      ] 
     } 
    ] 

、ありがとうございました。

答えて

0

あなたの他の領域が最初に保存されている場合、あなたはこのようなobjectIdsとのリストとして子供たちを救うことができますが:

children: [{ 
    type: Schema.ObjectId, 
    ref: 'Region' 
}] 

別のオプションは、あなたのスキーマを再設計し、あなたの地域の「親」を持っており、削除することです「子供」フィールド。次に、すべての子を取得する必要があるときは、簡単にクエリを実行でき、大きな入れ子オブジェクトはありません。

var RegionSchema = new Schema({ 
    --- other fields omitted --- 

    parent: { 
     type: Schema.ObjectId, 
     ref: 'Region' 
    } 
});