Pourquoi Mongoose ajoute-t-il des tableaux vierges?

J’essaie de commencer à utiliser Mongoose en tant qu’ODM pour MongoDB avec mon application node.js. J’ai remarqué que lorsque je conçois un schéma avec un document incorporé, si je n’y ajoute aucune valeur, il stocke un tableau vide “[]” en mongo. Pourquoi est-ce? J’essaie de stocker les modifications historiques apscopes aux enregistrements et un tableau vide signifierait que cette modification supprimait la valeur. Voici un exemple de schéma.

schema.Client = new mongoose.Schema({ name:{type:Ssortingng, required:true}, products:[{ name:{type:Ssortingng, index:true}, startDate:Date, endDate:Date }], subdomain:{type:Ssortingng, index:{unique:true}}, }) 

Voici le document résultant lorsque je sauvegarde un document avec juste un nom et un sous-domaine.

 { "name": "Smith Company", "products": [], "subdomain": "smith" } 

Pourquoi at-il ajouté des produits avec un tableau vide par défaut et comment puis-je l’arrêter?

Un tableau vide vous permet d’append ou de supprimer des éléments de votre modèle.

$push $addToSet $pull in update vous aiderait à gérer vos éléments de tableau.

Si vous n’avez pas de tableau vide, vous ne pouvez pas pousser les éléments à null

Mais c’est possible dans un tableau vide .

Vous pouvez contourner ce problème en définissant le schéma comme ci-dessous:

 products: { type: [{ name:Ssortingng, startDate:Date, endDate:Date }], default: undefined } 

Cela semble être intentionnel, mais il existe une solution de contournement utilisant un gestionnaire ‘pre’ pour supprimer le tableau vide par défaut: https://github.com/LearnBoost/mongoose/issues/1335

Cela n’a fonctionné que pour moi lorsque j’ai défini le champ sur null , cependant. Si je le mets à undefined comme dans l’exemple de code, le tableau vide semble revenir.

Parce que dans votre schéma, vous définissez les produits comme étant un tableau d’objects. Vous devez essayer quelque chose comme:

 products: { name:{type:Ssortingng, index:true}, startDate:Date, endDate:Date }, 

Cela va stocker un object vide au lieu d’un tableau.