2012-09-19 12 views
186

Sto usando Mongoose versione 3 con la versione 2.2 MongoDB. Ho notato che un campo __v ha iniziato a comparire nei miei documenti MongoDB. Ha qualcosa a che fare con il versioning? Come viene usato?Che cos'è il campo "__v" in MongoDB

risposta

192

Da here:

Il versionKey è una proprietà impostata su ogni documento quando prima creato Taccone. Questo valore di chiave contiene la revisione interna del documento . Il nome di questa proprietà del documento è configurabile. Il valore predefinito di è __v.

Se questo conflitto con l'applicazione è possibile configurare in quanto tali:

new Schema({..}, { versionKey: '_somethingElse' }) 
+7

E 'sicuro usare questo prop erty per determinare se un documento è stato appena creato (ad es. '__v === 0')? –

+18

@ExplosionPills per riferimento futuro: no. La chiave di versione viene incrementata solo dopo operazioni che potrebbero causare un conflitto, modificando le posizioni dell'array. Altri aggiornamenti non lo incrementeranno. Il post di rilascio originale lo spiega in dettaglio: http://aaronheckmann.tumblr.com/post/48943525537/mongoose-v3-part-1-versioning –

+2

C'è un modo per nasconderlo dai documenti restituiti dalle query? – diosney

33

Beh, non riesco a vedere la soluzione di Tony ... quindi devo gestire io stesso ...


Se non avete bisogno di version_key, si può solo:

var UserSchema = new mongoose.Schema({ 
    nickname: String, 
    reg_time: {type: Date, default: Date.now} 
}, { 
    versionKey: false // You should be aware of the outcome after set to false 
}); 
+12

qual è il risultato dell'impostazione su false? – xperator

+5

@xperator Vedi qui → http://mongoosejs.com/docs/guide.html#versionKey –

+0

Puoi anche chiamare 'resultFromMongo.toObject ({versionKey: false})', per surprimere il valore. –

Problemi correlati