the*_*ham 63
您可以通过将versionKey
选项设置为来禁用模式定义中的"__v"属性false
.例如:
var widgetSchema = new Schema({ ... attributes ... }, { versionKey: false });
Run Code Online (Sandbox Code Playgroud)
我不认为你可以全局禁用它们,但只能按Schema执行.您可以在此处阅读有关Schema 选项的更多信息.您可能还会发现Schema set方法很有用.
Ale*_*hiy 37
要禁用"__v"属性(不推荐使用),请使用versionKey
架构选项:
var Schema = new Schema({...}, { versionKey: false });
Run Code Online (Sandbox Code Playgroud)
要将其隐藏在所有查询中(有时可能不是您想要的查询),请使用select
模式类型选项:
var Schema = new Schema({ __v: { type: Number, select: false}})
Run Code Online (Sandbox Code Playgroud)
Ami*_*noy 12
定义一个toObject.transform
函数,并确保toObject
在从mongoose获取文档时始终调用.
var SomeSchema = new Schema({
<some schema spec>
} , {
toObject: {
transform: function (doc, ret, game) {
delete ret.__v;
}
}
});
Run Code Online (Sandbox Code Playgroud)
试试这个,它将从每个查询响应中删除 _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);
Run Code Online (Sandbox Code Playgroud)
您可能不想禁用__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);
Run Code Online (Sandbox Code Playgroud)
现在__v
将存在,但不会将其返回doc.toJSON()
。
希望能帮助到你。
您可以使用查询中间件从输出中排除任何字段。在你的情况下,你可以使用这个:
// '/^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();
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
34347 次 |
最近记录: |