Parar o Mongoose de criar a propriedade _id para itens de matriz de sub-documento

Se você tem arrays de subdocumento, o Mongoose cria automaticamente ids para cada um. Exemplo:

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

Existe uma maneira de dizer ao Mongoose para não criar ids para objects dentro de um array?

É simples, você pode definir isso no 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); 

Você pode criar sub-documentos sem esquema e evitar _id. Apenas adicione _id: false à sua declaração do subdocumento.

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

Isso impedirá a criação de um campo _id em seu subdoc. Testado em Mongoose 3.8.1

Além disso, se você usar uma syntax de literal de object para especificar um sub-esquema, também poderá adicionar _id: false para suprimi-lo.

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

Eu estou usando o mangusto 4.6.3 e tudo que eu tinha que fazer era adicionar _id: false no esquema, não há necessidade de fazer um subschema.

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

Em mangusto v.3 agora você tem uma maneira alternativa de criar sub-documentos sem relações pais-filhos. E esses subdocumentos não terão índice

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