61

Mongoose はバージョン管理のために '__v' プロパティをスキーマに追加します - これをグローバルに無効にするか、すべてのクエリからグローバルに非表示にすることは可能ですか?

4

8 に答える 8

101

versionKeyオプションを に設定すると、スキーマ定義で「__v」属性を無効にできますfalse。例えば:

var widgetSchema = new Schema({ ... attributes ... }, { versionKey: false });

それらをグローバルに無効にできるとは思いませんが、スキーマごとにしか無効にできません。スキーマのオプションの詳細については、こちらをご覧くださいSchema set メソッドも役立つ場合があります。

于 2012-12-04T20:28:49.843 に答える
49

推奨されない '__v' プロパティを無効にするには、versionKeyスキーマ オプションを使用します。

var Schema = new Schema({...}, { versionKey: false });

すべてのクエリから非表示にするには、スキーマ タイプ オプションを使用しますselect

var Schema = new Schema({ __v: { type: Number, select: false}})
于 2014-03-16T11:43:15.880 に答える
26

ふたつのやり方:

  1. {versionKey: false}

  2. のようにクエリするときmodel.findById(id).select('-__v')

'-'フィールドを除外することを意味します

于 2015-03-26T02:35:02.253 に答える
20

関数を定義し、マングースからドキュメントを取得するときtoObject.transformは常に呼び出すようにしてください。toObject

var SomeSchema = new Schema({
    <some schema spec>
  } , {
    toObject: {
      transform: function (doc, ret, game) {
        delete ret.__v;
      }
    }
});
于 2014-11-22T10:17:25.713 に答える
7

これを試してみると、すべてのクエリ応答から _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);
于 2016-11-25T07:09:25.813 に答える
6

を無効にしたくない場合があります__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()

それが役に立てば幸い。

于 2016-06-29T06:14:16.960 に答える