2013-06-22 7 views

risposta

164

E 'semplice, è possibile definire questo nel 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); 
+0

salterà questo campo '_id' anche nella raccolta subSchema, o solo nel caso in cui il subSchema viene utilizzato per incorporare come matrice di elementi di sotto-documento? Lo chiedo in particolare a causa della mia [domanda] (http://stackoverflow.com/questions/38151433/mongoose-inserts-extra-id-in-array-of-objects-corresponding-to-related-entity) su SO oggi. –

+0

Uso due livelli di raccolte di sottoschemi nidificati. In altre parole, ho una collezione subSchema simile al tuo esempio. All'interno di questo, utilizzo un'altra raccolta di sotto-schemi diversa. Voglio che solo le istanze del modello del sotto-schema di primo livello non utilizzino gli ID, ma le istanze del modello dello schema secondario di secondo livello (nidificate) devono avere id. Quando utilizzo la soluzione, cioè specificando '{_id: false}', entrambi i livelli del sottoprogetto sono privi di id. Qualche modo per aggirare questo comportamento? –

+1

Hai provato, per il terzo livello di impostare '{_id: true}'? – throrin19

-3

In mangusta v.3 Ora avete modo alternativo per creare sotto-documenti senza genitori - Relazioni bambini. E questi sotto-documenti non avranno indice

var mongoose = require("mongoose"); 

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

var model = mongoose.model('tablename', schema); 
+1

L'ultima volta che controllo, mangusta aggiunge gli id ​​anche a quei documenti secondari. –

+0

Aggiungono id ai sottodoc – wlingke

78

È possibile creare sottocartelle senza schema ed evitare _id. Basta aggiungere _id: false alla dichiarazione del documento secondario.

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

Questo consentirà di evitare la creazione di un campo _id nel vostro SubDoc. Testato in Mongoose 3.8.1

24

Inoltre, se si utilizza una sintassi letterale dell'oggetto per specificare uno schema secondario, è possibile anche aggiungere _id: false per sopprimerlo.

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

sto usando mangusta 4.6.3 e tutto quello che dovevo fare era aggiungere _id: false nello schema, non c'è bisogno di fare un subschema.

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

c'è un modo per rendere unici attraverso l'intera collezione? – Saitama

+0

Probabilmente non con questo metodo, ma potresti sempre provare. '_id' è un campo piuttosto che un vincolo. – jemiloii

+0

se durante la creazione di quel sotto-documento, assegno esplicitamente '' '_id = mongoose.Types.ObjectId()' '', allora _id sarebbe univoco attraverso la raccolta? – Saitama

Problemi correlati