2017-08-30 1 views
4

Dans mon schéma Food, j'ai différents champs basés sur l'autre champ appelé yummy. Par exemple:Le schéma Mongoose crée un champ de tableau vide

  • si yummy égal pancake, mes champs sont dough et jam
  • si yummy égal pizza, mes champs sont dough, meat et cheese

etc. Il fonctionne comme prévu lors de l'enregistrement docs - Je viens de passer les champs que je veux être enregistré par le document, car aucun d'entre eux sont requis sauf yummy. Donc, si je sauver:

{ 
    yummy: 'pizza' 
    dough: 'thin' 
    meat : 'peperroni', 
    cheese: [ObjectId("59a65a4f2170d90b0436ed4b")] // refs to the cheeses collection. 
} 

Mon document de ressemble prévu.

Le problème est avec le champ de type: Array. Quand je sauve:

{ 
    yummy: 'pancake', 
    dough: 'thick', 
    jam: 'blueberry' 
} 

Mon document est enregistré avec un champ cheese: [] supplémentaire. Dans mon schéma, le fromage est défini comme suit:

Mongoose.model('Food', { 
    ... 
    cheese: { 
     type: [{ type: Mongoose.Schema.ObjectId, ref: 'Cheese' }], 
     required: false 
    }, 
    ... 
}); 

j'ai vérifié si mongo a besoin de la doc d'avoir un champ tableau prédéfini comme vide en cas de $push utilisé dans la mise à jour - il ne fonctionne pas. Donc, la question est: comment éviter d'ajouter un champ tableau vide à mon document lors de l'enregistrement?

+1

Cela dépend de votre schéma, si votre schéma a un tableau défini, et il va créer un tableau vide tho à la création de documents. Si vous voulez jouer avec deux versions de la collection (une avec fromage, une sans), créez deux versions du schéma [regardez ici] (https://stackoverflow.com/questions/14453864/use-more-than-one -schema-per-collection-on-mongodb) –

+1

Merci, ça aide. – wscourge

+0

Alors avez-vous trouvé quelque chose?Je suis réellement intéressé –

Répondre

5

Lorsque vous enregistrez le document, consultez le schéma de la collection associée.

Il prend tous les champs que vous lui donnez et augmente les valeurs. Il crée également des valeurs par défaut pour les champs pour lesquels vous n'avez rien donné.

C'est le comportement de la mangouste.


Dans votre cas, que pouvons-nous faire?

Nous allons créer deux schémas liés à la même collection. Un avec le fromage de champ et un sans. Donc, quand vous allez enregistrer un nouveau document avec le schéma sans cheese, il ne va pas être créé.


En pratique, la collection contiendra deux types de documents différents.

Here is a link about using multiple schema related to a single collection