Saya menggunakan Mongooseversi 3 dengan MongoDBversi 2.2. Saya perhatikan ada __vbidang yang mulai muncul di MongoDBdokumen saya . Apakah ada hubungannya dengan versi? Bagaimana ini digunakan?
Ini versionKeyadalah properti yang ditetapkan pada setiap dokumen saat pertama kali dibuat oleh Mongoose. Nilai kunci ini berisi revisi internal dokumen. Nama properti dokumen ini dapat dikonfigurasi. Standarnya adalah __v.
Jika ini bertentangan dengan aplikasi Anda, Anda dapat mengonfigurasi seperti:
Apakah aman menggunakan properti ini untuk menentukan apakah suatu dokumen baru saja dibuat (mis. __v === 0)?
Pil Ledakan
39
@ExplosionPills untuk referensi di masa mendatang: no. Kunci versi hanya bertambah setelah operasi yang dapat menyebabkan konflik, memodifikasi posisi array. Pembaruan lainnya tidak akan menambahnya. Posting rilis asli menjelaskannya secara rinci: aaronheckmann.tumblr.com/post/48943525537/…
Ricardo Tomasi
2
Apakah ada cara untuk menyembunyikannya dari dokumen yang dikembalikan dari kueri?
diosney
6
@diosney query.select('-__v'). @ExplosionPills Anda akan perlu menambahkan middleware luwak suka schema.pre('save', function (next) { this.increment(); next(); }).
wprl
3
@talentedmrjones @wprl Itulah yang saya lakukan sekarang, tapi saya ingin sesuatu yang bisa saya masukkan ke Skema secara langsung, jadi di semua pertanyaan.
diosney
73
Yah, saya tidak bisa melihat solusi Tony ... jadi saya harus menanganinya sendiri ...
Jika Anda tidak memerlukan version_key, Anda bisa:
varUserSchema=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});
Mengatur versionKey ke false berarti dokumen tidak lagi diversi.
Ini bermasalah jika dokumen berisi larik sub dokumen. Salah satu sub dokumen dapat dihapus, mengurangi ukuran array. Kemudian, operasi lain dapat mengakses sub dokumen dalam array di posisi semula.
Karena array sekarang lebih kecil, mungkin secara tidak sengaja mengakses subdocument yang salah dalam array.
VersionKey memecahkan ini dengan mengaitkan dokumen dengan versionKey, yang digunakan oleh luwak secara internal untuk memastikan itu mengakses versi koleksi yang tepat.
Jawaban:
Dari sini :
sumber
__v === 0
)?query.select('-__v')
. @ExplosionPills Anda akan perlu menambahkan middleware luwak sukaschema.pre('save', function (next) { this.increment(); next(); })
.Yah, saya tidak bisa melihat solusi Tony ... jadi saya harus menanganinya sendiri ...
Jika Anda tidak memerlukan version_key, Anda bisa:
Mengatur versionKey ke false berarti dokumen tidak lagi diversi.
Ini bermasalah jika dokumen berisi larik sub dokumen. Salah satu sub dokumen dapat dihapus, mengurangi ukuran array. Kemudian, operasi lain dapat mengakses sub dokumen dalam array di posisi semula.
Karena array sekarang lebih kecil, mungkin secara tidak sengaja mengakses subdocument yang salah dalam array.
VersionKey memecahkan ini dengan mengaitkan dokumen dengan versionKey, yang digunakan oleh luwak secara internal untuk memastikan itu mengakses versi koleksi yang tepat.
Informasi lebih lanjut dapat ditemukan di: http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html
sumber
resultFromMongo.toObject({ versionKey: false })
, untuk mengesampingkan nilainya.schema.set('versionKey', false);
Kita dapat menggunakan versionKey: false dalam definisi Skema
sumber