Une introduction aux types de schéma de mangouste

Dans Mongoose, un SchemaType est un objet de configuration pour un chemin unique dans un schéma. Un SchemaType indique le type de chemin, comment valider ce chemin, quelle est la valeur par défaut du chemin et d'autres options de configuration spécifiques à Mongoose.

const schema = Schema({ name: String, age: Number });

schema.path('name') instanceof mongoose.SchemaType; // true
schema.path('age') instanceof mongoose.SchemaType; // true

Le SchemaType la classe n'est qu'une classe de base. Il existe plusieurs classes qui héritent de SchemaType qui représentent différents types de mangouste principaux :

  • mongoose.Schema.Types.String
  • mongoose.Schema.Types.Number
  • mongoose.Schema.Types.Date
  • mongoose.Schema.Types.Buffer
  • mongoose.Schema.Types.Boolean
  • mongoose.Schema.Types.Mixed
  • mongoose.Schema.Types.ObjectId (ou, de manière équivalente, mongoose.ObjectId )
  • mongoose.Schema.Types.Array
  • mongoose.Schema.Types.Decimal128
  • mongoose.Schema.Types.Map

Par exemple :

const schema = Schema({ name: String, age: Number });

schema.path('name') instanceof mongoose.SchemaType; // true
schema.path('name') instanceof mongoose.Schema.Types.String; // true

schema.path('age') instanceof mongoose.SchemaType; // true
schema.path('age') instanceof mongoose.Schema.Types.Number; // true

Travailler avec des types de schéma

Vous n'êtes normalement pas obligé de travailler avec SchemaType instances directement. Vous pouvez déclarer des validateurs et des valeurs par défaut dans votre définition de schéma. Par exemple, l'exemple ci-dessous définit la valeur par défaut age à 25 et ajoute un validateur qui assure age a au moins 21 ans.

const schema = Schema({
  age: {
    type: Number,
    default: 25,
    validate: v => v >= 21
  }
});

Ce qui précède est la façon dont vous déclarez normalement les valeurs par défaut et les validateurs dans Mongoose.Mais rien ne vous empêche de les ajouter sur le age SchemaTypeaprès avoir créé votre schéma.

// Equivalent:
const schema = Schema({ age: Number });

schema.path('age').default(25);
schema.path('age').validate(v => v >= 21);

Cette dernière syntaxe est équivalente à la première, mais n'est pas couramment utilisée. Le cas le plus courant pour travailler avec SchemaType instances directement avec des discriminateurs intégrés.

Par exemple, supposons que vous ayez un Order schéma, et un Order a une liste intégrée de products . Chaque produit peut être un livre, un ordinateur ou autre chose, et chaque type de produit peut avoir des propriétés différentes. Les discriminateurs intégrés permettent à un tableau de stocker des sous-documents conformes à différents schémas en fonction du __t de chaque sous-document. propriété.

const productSchema = new Schema({
  imageURL: String,
  name: String
}, { discriminatorKey: '__t' });

const bookSchema = new Schema({
  author: String
});

const computerSchema = new Schema({
  ramGB: Number
});

const orderSchema = new Schema({
  createdAt: Date,
  product: [productSchema]
});

// Add discriminators to the `products` SchemaType.
orderSchema.path('products').discriminator('Book', bookSchema);
orderSchema.path('products').discriminator('Computer', computerSchema);

const Order = mongoose.model('Order', orderSchema);
Vous voulez devenir l'expert MongoDB de votre équipe ? "Mastering Mongoose" résume 8 ans de leçons durement gagnées en construisant des applications Mongoose à grande échelle en 153 pages. Cela signifie que vous pouvez apprendre ce que vous devez savoir pour créer des applications complètes prêtes pour la production avec Node.js et MongoDB en quelques jours. Obtenez votre copie !