私が使用しているMongoose
と、バージョン3をMongoDB
バージョン2.2。ドキュメントに__v
フィールドが表示され始めたことに気づきましたMongoDB
。バージョン管理と関係がありますか?使い方は?
私が使用しているMongoose
と、バージョン3をMongoDB
バージョン2.2。ドキュメントに__v
フィールドが表示され始めたことに気づきましたMongoDB
。バージョン管理と関係がありますか?使い方は?
回答:
ここから:
versionKey
最初のマングースによって作成された場合に、各文書に設定されたプロパティです。このキー値には、ドキュメントの内部リビジョンが含まれています。このドキュメントプロパティの名前は構成可能です。デフォルトは__v
です。これがアプリケーションと競合する場合は、次のように構成できます。
new Schema({..}, { versionKey: '_somethingElse' })
__v === 0
ですか(例:)?
query.select('-__v')
。@ExplosionPillsのようなマングースミドルウェアを追加する必要がありますschema.pre('save', function (next) { this.increment(); next(); })
。
さて、トニーの解決策を見ることができません...だから私はそれを自分で処理しなければなりません...
version_keyが必要ない場合は、次のようにします。
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
});
versionKeyをfalseに設定すると、ドキュメントはバージョン管理されなくなります。
ドキュメントにサブドキュメントの配列が含まれている場合、これは問題になります。サブドキュメントの1つを削除して、配列のサイズを小さくすることができます。その後、別の操作で配列内のサブドキュメントに元の位置でアクセスできます。
配列が小さくなったため、配列内の誤ったサブドキュメントに誤ってアクセスする可能性があります。
versionKeyは、mongooseが内部で使用するa versionKeyにドキュメントを関連付けることでこれを解決し、適切なコレクションバージョンにアクセスできるようにします。
詳細については、http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.htmlを参照してください。
resultFromMongo.toObject({ versionKey: false })
値を抑制するためにを呼び出すこともできます。
schema.set('versionKey', false);
スキーマ定義でversionKey:falseを使用できます
'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();
});
}
}