Mongoose добавляет свойство "__v" в Schema для управления версиями - возможно ли отключить это глобально или глобально скрыть его от всех запросов?
Mongoose __v свойство - скрыть?
Ответ 1
Вы можете отключить атрибут "__v" в своих определениях схемы, установив для параметра versionKey
значение false
. Например:
var widgetSchema = new Schema({ ... attributes ... }, { versionKey: false });
Я не думаю, что вы можете отключить их глобально, но можете сделать это только на схему. Подробнее о Schema здесь можно прочитать здесь. Вы также можете найти метод набора схем.
Ответ 2
Чтобы отключить свойство '__v', которое не рекомендуется, используйте versionKey
:
var Schema = new Schema({...}, { versionKey: false });
Чтобы скрыть его от всех запросов, которые иногда могут быть не то, что вы хотите тоже, используйте select
параметр типа схемы:
var Schema = new Schema({ __v: { type: Number, select: false}})
Ответ 3
определите функцию toObject.transform
и всегда вызывайте toObject
при получении документов из mongoose.
var SomeSchema = new Schema({
<some schema spec>
} , {
toObject: {
transform: function (doc, ret, game) {
delete ret.__v;
}
}
});
Ответ 4
Два способа:
-
{versionKey: false}
-
когда вы запрашиваете, например
model.findById(id).select('-__v')
'-'
означает исключение поля
Ответ 5
Попробуйте это, он удалит _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);
Ответ 6
Вы не можете отключить __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()
.
Надеюсь, что это поможет.
Ответ 7
Да, это просто, просто отредактируйте файл "schema.js", который находится внутри
"node_modules\mongoose\lib"
Найдите "options = utils.options ({ ... versionKey: '__v'..."
и измените значение "__v"
на false
.
Это изменит все почтовые запросы. (versionKey: '__v' => versionKey: false)