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);
// '/^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();
});
9条答案
按热度按时间xtupzzrd1#
您可以通过将
versionKey
选项设置为false
来禁用架构定义中的“__v”属性。例如:字符串
我不认为你可以全局禁用它们,但只能对每个Schema禁用。你可以在这里阅读更多关于Schema的选项。你可能也会发现Schema set方法很有用。
8ljdwjyq2#
若要禁用“__v”属性(不建议使用此属性),请使用
versionKey
架构选项:字符串
要对所有查询隐藏它(有时可能是not what you want too),请使用
select
模式类型选项:型
pgpifvop3#
两种方式:
1.当您查询时,如
model.findById(id).select('-__v')
'-'
表示排除字段z6psavjg4#
定义一个
toObject.transform
函数,并确保在从mongoose获取文档时始终调用toObject
。字符串
zaq34kh65#
尝试这个方法,它会从每个查询响应中删除_v。
字符串
ix0qys7i6#
你可能不想禁用
__v
,其他答案提供了一些链接来回答为什么你不应该禁用它。我已经使用这个库隐藏了
__v
和_id
https://www.npmjs.com/package/mongoose-hidden
字符串
现在
__v
将存在,但它不会与doc.toJSON()
一起返回。希望对你有帮助。
qlckcl4x7#
您可以使用查询中间件从输出中排除任何字段。在您的情况下,您可以使用:
字符串
有关文档查找中的更多信息:Middlewares选择方法
m528fe3b8#
在连接到DB(server.js)后设置此参数
字符串
mbjcgjjk9#
是的,这很简单,只需编辑里面的“schema.js”文件
1x个月
搜索
"options = utils.options ({ ... versionKey: '__v'..."
并将值"__v"
更改为false
。这将更改所有的发布请求。
(versionKey: '__v' => versionKey: false)