2012-12-04 6 views
18

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

答えて

39

versionKeyオプションをfalseに設定することで、スキーマ定義の "__v"属性を無効にすることができます。例:

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

グローバルに無効にすることはできませんが、スキーマごとにしか行うことはできません。スキーマのoptions hereについて詳しく読むことができます。 Schema set methodも参考になる場合があります。

+11

"__v"属性を無効にしても安全ですか?私はそれを無効にすると、それは将来の問題を引き起こすでしょうか? –

+1

クエリから返されたドキュメントからそれを隠す方法はありますか? – diosney

23

versionKey schema optionを使用し、not recommendedある '__v' プロパティを、無効にするには:

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

select schema type optionを使用し、時にはnot what you want tooことができ、すべてのクエリからそれを非表示にするには:

var Schema = new Schema({ __v: { type: Number, select: false}}) 
+0

どうすれば_idと__vをユーザに返す前に削除できますか?私ができるマッピングはありますか?スキーマからモデルへのマッピングは、これらの2つの属性を削除し、モデルからスキーマへのマッピングは、ユーザーが編集することはできませんが、まだそれらを参照する必要があるいくつかのフィールドを削除するとしましょう。 –

9

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

var SomeSchema = new Schema({ 
    <some schema spec> 
    } , { 
    toObject: { 
     transform: function (doc, ret, game) { 
     delete ret.__v; 
     } 
    } 
}); 
+7

また、 'user.toObject({versionKey:false})'を呼び出すこともできます。これにより '__v'バージョンのプロパティが隠されます。 – FullStackForger

+0

'toJSON()'も必要ですか? – binki

8

二つの方法:model.findById(id).select('-__v')

'-'手段のような

  • {versionKey: false}

  • 照会

      は、フィールドに除外

  • 0

    __vを無効にしたくない場合は、他の回答では無効にしてはいけない理由を説明するリンクはほとんどありません。私は今__v__v_id

    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); 
    

    を非表示にするには、このライブラリを使用しました

    は存在しますが、それはdoc.toJSON()で返されることはありません。

    希望します。

    1

    これを試すと、すべてのクエリ応答から_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); 
    
    0

    はい、それだけで"options = utils.options ({ ... versionKey: '__v'..."と変更値falseから"__v"を検索"node_modules\mongoose\lib"

    内にある "schema.js" ファイルを編集し、簡単です。

    これにより、すべての投稿要求が変更されます。(versionKey: '__v' => versionKey: false)

    関連する問題