Si vous avez des tableaux de sous-documents, Mongoose crée automatiquement des identifiants pour chacun. 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'identifiants pour les objets d'un tableau?
C'est simple, vous pouvez le définir dans le sous-schéma:
var mongoose = require("mongoose");
var subSchema = mongoose.Schema({
//your subschema content
},{ _id : false });
var schema = mongoose.Schema({
// schema content
subSchemaCollection : [subSchema]
});
var model = mongoose.model('tablename', schema);
Vous pouvez créer des sous-documents sans schéma et éviter _id. Ajoutez simplement _id: false à votre déclaration de sous-document.
var schema = new mongoose.Schema({
field1:{type:String},
subdocArray:[{
_id:false,
field :{type:String}
}]
});
Cela empêchera la création d'un champ _id dans votre sous-doc. Testé en Mongoose 3.8.1
De plus, si vous utilisez une syntaxe littérale d'objet pour spécifier un sous-schéma, vous pouvez simplement ajouter _id: false
pour le supprimer.
{
sub: {
property1: String,
property2: String,
_id: false
}
}
J'utilise mongoose 4.6.3 et tout ce que je devais faire était d'ajouter _id: false dans le schéma, pas besoin de créer un sous-schéma.
{
_id: ObjectId
subDocArray: [
{
_id: false,
field: "String"
}
]
}
Vous pouvez utiliser l'un ou l'autre
var subSchema = mongoose.Schema({
//subschema fields
},{ _id : false });
ou
var subSchema = mongoose.Schema({
//subschema content
_id : false
});
Vérifiez votre version de mangouste avant d'utiliser la deuxième option