Mongoose在Schema中添加了一个'__v'属性来进行版本控制-是否可以全局禁用或全局隐藏它?
xtupzzrd1#
您可以通过将versionKey选项设置为false来禁用架构定义中的“__v”属性。例如:
versionKey
false
var widgetSchema = new Schema({ ... attributes ... }, { versionKey: false });
字符串我不认为你可以全局禁用它们,但只能对每个Schema禁用。你可以在这里阅读更多关于Schema的选项。你可能也会发现Schema set方法很有用。
8ljdwjyq2#
若要禁用“__v”属性(不建议使用此属性),请使用versionKey架构选项:
var Schema = new Schema({...}, { versionKey: false });
字符串要对所有查询隐藏它(有时可能是not what you want too),请使用select模式类型选项:
select
var Schema = new Schema({ __v: { type: Number, select: false}})
型
pgpifvop3#
两种方式:
model.findById(id).select('-__v')
'-'
z6psavjg4#
定义一个toObject.transform函数,并确保在从mongoose获取文档时始终调用toObject。
toObject.transform
toObject
var SomeSchema = new Schema({ <some schema spec> } , { toObject: { transform: function (doc, ret, game) { delete ret.__v; } }});
var SomeSchema = new Schema({
<some schema spec>
} , {
toObject: {
transform: function (doc, ret, game) {
delete ret.__v;
}
});
字符串
zaq34kh65#
尝试这个方法,它会从每个查询响应中删除_v。
// transform for sending as jsonfunction omitPrivate(doc, obj) { delete obj.__v; return obj;}// schema optionsvar options = { toJSON: { transform: omitPrivate }};// schemavar Schema = new Schema({...}, options);
// 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);
ix0qys7i6#
你可能不想禁用__v,其他答案提供了一些链接来回答为什么你不应该禁用它。我已经使用这个库隐藏了__v和_idhttps://www.npmjs.com/package/mongoose-hidden
__v
_id
let mongooseHidden = require("mongoose-hidden")();// This will add `id` in toJSONyourSchema.set("toJSON", { virtuals: true, });// This will remove `_id` and `__v` yourSchema.plugin(mongooseHidden);
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()一起返回。希望对你有帮助。
doc.toJSON()
qlckcl4x7#
您可以使用查询中间件从输出中排除任何字段。在您的情况下,您可以使用:
// '/^find/' is a regex that matches queries that start with find// like find, findOne, findOneAndDelete, findOneAndRemove, findOneAndUpdateschema.pre(/^find/, function(next) { // this keyword refers to the current query // select method excludes or includes fields using + and - this.select("-__v"); next();});
// '/^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选择方法
m528fe3b8#
在连接到DB(server.js)后设置此参数
mongoose.modelNames().forEach(function (modelName) { mongoose.model(modelName).schema.set("versionKey", false);});
mongoose.modelNames().forEach(function (modelName) {
mongoose.model(modelName).schema.set("versionKey", false);
mbjcgjjk9#
是的,这很简单,只需编辑里面的“schema.js”文件1x个月搜索"options = utils.options ({ ... versionKey: '__v'..."并将值"__v"更改为false。这将更改所有的发布请求。(versionKey: '__v' => versionKey: false)
"options = utils.options ({ ... versionKey: '__v'..."
"__v"
(versionKey: '__v' => versionKey: false)
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)