it-swarm.com.de

Stoppen Sie, dass Mongoose die Eigenschaft _id für Unterdokument-Array-Elemente erstellt

Wenn Sie über Filialdokument-Arrays verfügen, erstellt Mongoose automatisch IDs für jedes Array. Beispiel:

{
    _id: "mainId"
    subDocArray: [
      {
        _id: "unwantedId",
        field: "value"
      },
      {
        _id: "unwantedId",
        field: "value"
      }
    ]
}

Gibt es eine Möglichkeit, Mongoose anzuweisen, keine IDs für Objekte in einem Array zu erstellen?

190
Atlas

Es ist ganz einfach, Sie können dies im Teilschema definieren:

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

Sie können Unterdokumente ohne Schema erstellen und _id vermeiden. Fügen Sie Ihrer Filialdokument-Deklaration einfach _id: false hinzu.

var schema = new mongoose.Schema({
   field1:{type:String},
   subdocArray:[{
      _id:false,
      field :{type:String}
   }]
});

Dadurch wird die Erstellung eines _id-Felds in Ihrem Subdoc verhindert. Getestet in Mongoose 3.8.1

113
Joel Grenon

Wenn Sie zum Angeben eines Unterschemas eine Objektliteral-Syntax verwenden, können Sie auch einfach _id: false Hinzufügen, um diese zu unterdrücken.

{
   sub: {
      property1: String,
      property2: String,
      _id: false
   }
}
39
wlingke

Ich benutze Mungo 4.6.3 und alles, was ich tun musste, war _id: false im Schema hinzuzufügen, keine Notwendigkeit, ein Teilschema zu erstellen.

{
    _id: ObjectId
    subDocArray: [
      {
        _id: false,
        field: "String"
      }
    ]
}
19
jemiloii

Sie können einen der beiden verwenden

var subSchema = mongoose.Schema({
//subschema fields    

},{ _id : false });

oder

var subSchema = mongoose.Schema({
//subschema content
_id : false    

});

Überprüfen Sie Ihre Mungoversion, bevor Sie die zweite Option verwenden

0
Deeksha Sharma