2012-09-19 16 views
186

Używam wersji Mongoose wersja 3 z MongoDB wersja 2.2. Zauważyłem, że pole __v zaczęło pojawiać się w moich dokumentach MongoDB. Czy to ma coś wspólnego z wersjonowaniem? Jak to jest używane?Co to jest pole "__v" w MongoDB

Odpowiedz

192

Od here:

versionKey jest właściwością ustawić na każdym dokumencie po raz pierwszy stworzył przez Mongoose. Ta wartość kluczy zawiera wewnętrzną wersję dokumentu . Nazwę tej właściwości dokumentu można konfigurować. Domyślna wartość to __v.

Jeśli jest to sprzeczne z aplikacji można skonfigurować jako takie:

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

Czy można bezpiecznie korzystać z tej podpory Aby ustalić, czy dokument został właśnie utworzony (np. '__v === 0')? –

+18

@ExplosionPills na przyszłość: nie. Klucz wersji jest inkrementowany tylko po operacjach, które mogą powodować konflikt, modyfikując pozycje tablicy. Inne aktualizacje go nie zwiększą. Oryginalny post wydania wyjaśnia go szczegółowo: http://aaronheckmann.tumblr.com/post/48943525537/mongoose-v3-part-1-versioning –

+2

Czy istnieje sposób na ukrycie go przed zwróconymi dokumentami z zapytań? – diosney

33

Cóż, nie widzę rozwiązania Tony'ego ... więc muszę poradzić sobie ...


Jeśli nie trzeba version_key, można po prostu:

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

jaki jest wynik ustawienia go na false? – xperator

+5

@xperator Zobacz tutaj → http://mongoosejs.com/docs/guide.html#versionKey –

+0

Możesz także wywołać 'resultFromMongo.toObject ({versionKey: false}), aby zmniejszyć wartość. –