0

Je voudrais stocker les éléments suivants:Mongoose auto imbrication

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] 
}); 

Comme vous pouvez le voir, je suis en train de faire un objet région, capable de contenir des objets de la région, mais cela ne parvient pas à sauver sans exception , sans doute le [ceci] dans le schéma se coince dans une boucle sans fin ou quelque chose.

Comment puis-je faire en sorte que cela fonctionne pour les régions d'imbrication?

La charge utile JSON je pouvais attendre à envoyer à ce schéma:

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: [] 
       } 
      ] 
     } 
    ] 

Je vous remercie de toute aide, je vous remercie.

Répondre

0

Si vos autres régions sont enregistrées d'abord, vous pouvez enregistrer les enfants comme une liste de objectIds comme ceci:

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

Une autre option consiste à redessiner votre schéma et un « parent » sur votre région et supprimer le champ 'enfants'. Ensuite, lorsque vous avez besoin d'obtenir tous les enfants, vous pouvez facilement interroger et ne pas avoir de gros objets imbriqués.

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

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