Używam Mongoose
wersji 3 z MongoDB
wersją 2.2. Zauważyłem, że __v
w moich MongoDB
dokumentach zaczęło pojawiać się pole . Czy to ma coś wspólnego z wersjonowaniem? Jak to jest używane?
Używam Mongoose
wersji 3 z MongoDB
wersją 2.2. Zauważyłem, że __v
w moich MongoDB
dokumentach zaczęło pojawiać się pole . Czy to ma coś wspólnego z wersjonowaniem? Jak to jest używane?
Odpowiedzi:
Od tutaj :
versionKey
Jest właściwością ustawić na każdym dokumencie po raz pierwszy stworzony przez Mongoose. Ta wartość kluczy zawiera wewnętrzną wersję dokumentu. Nazwę tej właściwości dokumentu można konfigurować. Domyślnie jest to__v
.Jeśli powoduje to konflikt z aplikacją, możesz skonfigurować jako taki:
new Schema({..}, { versionKey: '_somethingElse' })
__v === 0
)?
query.select('-__v')
. @ExplosionPills należy dodać takie oprogramowanie pośrednie jak mangusta schema.pre('save', function (next) { this.increment(); next(); })
.
Cóż, nie widzę rozwiązania Tony'ego ... więc muszę sobie z tym poradzić ...
Jeśli nie potrzebujesz wersji_klucza, możesz 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
});
Ustawienie parametru versionKey na false oznacza, że dokument nie jest już wersjonowany.
Jest to problematyczne, jeśli dokument zawiera tablicę dokumentów podrzędnych. Jeden z dokumentów podrzędnych można usunąć, zmniejszając rozmiar tablicy. Później inna operacja może uzyskać dostęp do dokumentu w tablicy w jego pierwotnej pozycji.
Ponieważ tablica jest teraz mniejsza, może przypadkowo uzyskać dostęp do niewłaściwego dokumentu podrzędnego w tablicy.
VersionKey rozwiązuje ten problem, łącząc dokument z kluczem wersji, używanym wewnętrznie przez mangoose, aby mieć pewność, że uzyska dostęp do właściwej wersji kolekcji.
Więcej informacji można znaleźć na stronie : http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html
resultFromMongo.toObject({ versionKey: false })
, aby zignorować wartość.
schema.set('versionKey', false);
Możemy użyć versionKey: false w definicji schematu
'use strict';
const mongoose = require('mongoose');
export class Account extends mongoose.Schema {
constructor(manager) {
var trans = {
tran_date: Date,
particulars: String,
debit: Number,
credit: Number,
balance: Number
}
super({
account_number: Number,
account_name: String,
ifsc_code: String,
password: String,
currency: String,
balance: Number,
beneficiaries: Array,
transaction: [trans]
}, {
versionKey: false // set to false then it wont create in mongodb
});
this.pre('remove', function(next) {
manager
.getModel(BENEFICIARY_MODEL)
.remove({
_id: {
$in: this.beneficiaries
}
})
.exec();
next();
});
}
}