Mongoose はバージョン管理のために '__v' プロパティをスキーマに追加します - これをグローバルに無効にするか、すべてのクエリからグローバルに非表示にすることは可能ですか?
8 に答える
versionKey
オプションを に設定すると、スキーマ定義で「__v」属性を無効にできますfalse
。例えば:
var widgetSchema = new Schema({ ... attributes ... }, { versionKey: false });
それらをグローバルに無効にできるとは思いませんが、スキーマごとにしか無効にできません。スキーマのオプションの詳細については、こちらをご覧ください。Schema set メソッドも役立つ場合があります。
推奨されない '__v' プロパティを無効にするには、versionKey
スキーマ オプションを使用します。
var Schema = new Schema({...}, { versionKey: false });
すべてのクエリから非表示にするには、スキーマ タイプ オプションを使用します。select
var Schema = new Schema({ __v: { type: Number, select: false}})
ふたつのやり方:
{versionKey: false}
のようにクエリするとき
model.findById(id).select('-__v')
'-'
フィールドを除外することを意味します
関数を定義し、マングースからドキュメントを取得するときtoObject.transform
は常に呼び出すようにしてください。toObject
var SomeSchema = new Schema({
<some schema spec>
} , {
toObject: {
transform: function (doc, ret, game) {
delete ret.__v;
}
}
});
これを試してみると、すべてのクエリ応答から _v が削除されます。
// transform for sending as json
function omitPrivate(doc, obj) {
delete obj.__v;
return obj;
}
// schema options
var options = {
toJSON: {
transform: omitPrivate
}
};
// schema
var Schema = new Schema({...}, options);
を無効にしたくない場合があります__v
。他の回答では、無効にすべきではない理由に答えるリンクがほとんどありません。
このライブラリを使用して、__v
およびを非表示にしました_id
https://www.npmjs.com/package/mongoose-hidden
let mongooseHidden = require("mongoose-hidden")();
// This will add `id` in toJSON
yourSchema.set("toJSON", {
virtuals: true,
});
// This will remove `_id` and `__v`
yourSchema.plugin(mongooseHidden);
今__v
は存在しますが、 では返されませんdoc.toJSON()
。
それが役に立てば幸い。