Mongoose __v财产-隐藏?

jobtbby3  于 2024-01-08  发布在  Go
关注(0)|答案(9)|浏览(252)

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

xtupzzrd

xtupzzrd1#

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

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

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

8ljdwjyq

8ljdwjyq2#

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

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

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

  1. 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

  1. var SomeSchema = new Schema({
  2. <some schema spec>
  3. } , {
  4. toObject: {
  5. transform: function (doc, ret, game) {
  6. delete ret.__v;
  7. }
  8. }
  9. });

字符串

zaq34kh6

zaq34kh65#

尝试这个方法,它会从每个查询响应中删除_v。

  1. // transform for sending as json
  2. function omitPrivate(doc, obj) {
  3. delete obj.__v;
  4. return obj;
  5. }
  6. // schema options
  7. var options = {
  8. toJSON: {
  9. transform: omitPrivate
  10. }
  11. };
  12. // schema
  13. var Schema = new Schema({...}, options);

字符串

展开查看全部
ix0qys7i

ix0qys7i6#

你可能不想禁用__v,其他答案提供了一些链接来回答为什么你不应该禁用它。
我已经使用这个库隐藏了__v_id
https://www.npmjs.com/package/mongoose-hidden

  1. let mongooseHidden = require("mongoose-hidden")();
  2. // This will add `id` in toJSON
  3. yourSchema.set("toJSON", {
  4. virtuals: true,
  5. });
  6. // This will remove `_id` and `__v`
  7. yourSchema.plugin(mongooseHidden);

字符串
现在__v将存在,但它不会与doc.toJSON()一起返回。
希望对你有帮助。

展开查看全部
qlckcl4x

qlckcl4x7#

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

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

字符串
有关文档查找中的更多信息:Middlewares选择方法

m528fe3b

m528fe3b8#

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

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

字符串

mbjcgjjk

mbjcgjjk9#

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

相关问题