web-dev-qa-db-fra.com

Empêcher Mongoose de créer la propriété _id pour les éléments de tableau de sous-document

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?

190
Atlas

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);
239
throrin19

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

113
Joel Grenon

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
   }
}
39
wlingke

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"
      }
    ]
}
19
jemiloii

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

0
Deeksha Sharma