Si vous avez des tableaux de sous-documents, Mongoose crée automatiquement des identifiants pour chacun d'eux. Exemple:
{
_id: "mainId"
subDocArray: [
{
_id: "unwantedId",
field: "value"
},
{
_id: "unwantedId",
field: "value"
}
]
}
Existe-t-il un moyen de dire à Mongoose de ne pas créer d'ID pour les objets d'un tableau?
_id
champs même dans la collection subSchema, ou seulement dans le cas où le sousSchema est utilisé pour être incorporé en tant que tableau d'éléments de sous-document? Je pose cette question en particulier à cause de ma propre question sur SO aujourd'hui.{ _id: false }
, les deux niveaux de sous-schéma sont sans identifiants. Une façon de contourner ce problème?{ _id : true }
?let studentSchema = new Schema({ studentId: { type: ObjectId, ref: Student.modelName }, performance: [performanceSchema] }, { _id: false });
en ceci:let studentSchema = new Schema({ _id: false, id: false, studentId: { type: ObjectId, ref: Student.modelName }, performance: [performanceSchema] });
et cela a arrêté la_id
création sur lestudentSchema
mais a conservé la_id
création sur les objets dans leperformance
tableau des sous-documents. Je ne sais pas si les deux_id: false
etid: false
sont nécessaires.Vous pouvez créer des sous-documents sans schéma et éviter
_id
. Ajoutez simplement_id:false
à votre déclaration de sous-document.Cela empêchera la création d'un
_id
champ dans votre sous-doc.Testé chez Mongoose
v5.9.10
la source
De plus, si vous utilisez une syntaxe littérale d'objet pour spécifier un sous-schéma, vous pouvez également simplement l'ajouter
_id: false
pour le supprimer.la source
J'utilise mangouste 4.6.3 et tout ce que j'avais à faire était d'ajouter _id: false dans le schéma, pas besoin de faire un sous-schéma.
la source
_id
est un champ plutôt qu'une contrainte._id = mongoose.Types.ObjectId()
, est-ce que _id serait unique à travers la collection alors?Vous pouvez utiliser l'un des deux
ou
Vérifiez votre version de mangouste avant d'utiliser la deuxième option
la source
Si vous souhaitez utiliser un schéma prédéfini (avec _id) comme sous-document (sans _id), vous pouvez faire comme suit en théorie:
Mais cela n'a pas fonctionné pour moi. J'ai donc ajouté que:
Maintenant, je peux inclure subSourceSchema dans mon document parent sans _id. Je ne suis pas sûr que ce soit la bonne façon de procéder, mais cela fonctionne.
la source