Mongoose __v属性 - 隐藏?

时间:2012-12-04 09:34:52

标签: mongoose

Mongoose在Schema中为版本控制添加了一个'__v'属性 - 可以全局禁用它还是全局隐藏所有查询?

8 个答案:

答案 0 :(得分:57)

您可以通过将versionKey选项设置为false来禁用架构定义中的“__v”属性。例如:

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

我认为你不能全局禁用它们,但只能按Schema执行。您可以阅读有关Schema options here的更多信息。您可能还会发现Schema set method有帮助。

答案 1 :(得分:33)

要停用' __ v'属性not recommended,使用versionKey schema option

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

要隐藏所有查询(有时可以not what you want too),请使用select schema type option

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

答案 2 :(得分:12)

两种方式:

  1. {versionKey: false}

  2. 查询时
  3. ,例如model.findById(id).select('-__v')

  4. '-'表示排除字段

答案 3 :(得分:11)

定义toObject.transform函数,并确保在从mongoose获取文档时始终调用toObject

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

答案 4 :(得分:4)

您可能不想禁用__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()返回。

希望它有所帮助。

答案 5 :(得分:3)

尝试此操作将从每个查询响应中删除_v。

AppComponent

答案 6 :(得分:0)

您可以使用查询中间件从输出中排除任何字段。您可以使用以下方法:

// '/^find/' is a regex that matches queries that start with find
// like find, findOne, findOneAndDelete, findOneAndRemove, findOneAndUpdate
schema.pre(/^find/, function(next) {
    // this keyword refers to the current query
    // select method excludes or includes fields using + and -
    this.select("-__v");
    next();
});

有关文档查找的更多信息: Middlewares select method

答案 7 :(得分:-5)

是的,这很简单,只需编辑&#34; schema.js&#34;

里面的文件

"node_modules\mongoose\lib"

搜索"options = utils.options ({ ... versionKey: '__v'..."并将值"__v"更改为false

这将更改所有发布请求。 (versionKey: '__v' => versionKey: false)