Detener a Mongoose para que cree la propiedad _id para elementos de matriz de documentos secundarios

Si tiene matrices de subdocumentos, Mongoose crea automáticamente ids para cada una. Ejemplo:

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

¿Hay alguna manera de decirle a Mongoose que no cree identificadores para objetos dentro de una matriz?

Es simple, puedes definir esto en el subschema:

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

Puede crear sub documentos sin esquema y evitar _id. Simplemente agregue _id: falso a su statement de subdocumento.

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

Esto evitará la creación de un campo _id en su subdoc. Probado en Mongoose 3.8.1

Además, si utiliza una syntax literal de objeto para especificar un _id: false también puede agregar _id: false para suprimirlo.

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

Estoy usando mongoose 4.6.3 y todo lo que tuve que hacer fue agregar _id: falso en el esquema, sin necesidad de crear un subesquema.

 { _id: ObjectId subdocArray: [ { _id: false, field: "String" } ] } 

En mongoose v.3 ahora tiene una forma alternativa de crear sub-documentos sin padres – relaciones con los niños. Y estos sub-documentos no tendrán índice

 var mongoose = require("mongoose"); var schema = mongoose.Schema({ // schema content subSchema: [{ firstname: 'sub name', lastname: 'last name' }] }); var model = mongoose.model('tablename', schema);