Mongoose __v财产-隐藏?

jobtbby3  于 11个月前  发布在  Go
关注(0)|答案(9)|浏览(175)

Mongoose在Schema中添加了一个'__v'属性来进行版本控制-是否可以全局禁用或全局隐藏它?

xtupzzrd

xtupzzrd1#

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

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

字符串
我不认为你可以全局禁用它们,但只能对每个Schema禁用。你可以在这里阅读更多关于Schema的选项。你可能也会发现Schema set方法很有用。

8ljdwjyq

8ljdwjyq2#

若要禁用“__v”属性(不建议使用此属性),请使用versionKey架构选项:

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

字符串
要对所有查询隐藏它(有时可能是not what you want too),请使用select模式类型选项:

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

pgpifvop

pgpifvop3#

两种方式:

  1. 1x个月
    1.当您查询时,如model.findById(id).select('-__v')
    '-'表示排除字段
z6psavjg

z6psavjg4#

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

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

字符串

zaq34kh6

zaq34kh65#

尝试这个方法,它会从每个查询响应中删除_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);

字符串

ix0qys7i

ix0qys7i6#

你可能不想禁用__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()一起返回。
希望对你有帮助。

qlckcl4x

qlckcl4x7#

您可以使用查询中间件从输出中排除任何字段。在您的情况下,您可以使用:

// '/^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选择方法

m528fe3b

m528fe3b8#

在连接到DB(server.js)后设置此参数

mongoose.modelNames().forEach(function (modelName) {
    mongoose.model(modelName).schema.set("versionKey", false);
});

字符串

mbjcgjjk

mbjcgjjk9#

是的,这很简单,只需编辑里面的“schema.js”文件
1x个月
搜索"options = utils.options ({ ... versionKey: '__v'..."并将值"__v"更改为false
这将更改所有的发布请求。(versionKey: '__v' => versionKey: false)

相关问题