Я использую Mongoose
версию 3 с MongoDB
версией 2.2. Я заметил, что __v
поле начало появляться в моих MongoDB
документах. Это как-то связано с версионированием? Как это используется?
Я использую Mongoose
версию 3 с MongoDB
версией 2.2. Я заметил, что __v
поле начало появляться в моих MongoDB
документах. Это как-то связано с версионированием? Как это используется?
Ответы:
От сюда :
versionKey
Это свойство устанавливается на каждый документ , когда первый созданный Мангуст. Это значение ключа содержит внутреннюю редакцию документа. Имя этого свойства документа настраивается. По умолчанию это__v
.Если это конфликтует с вашим приложением, вы можете настроить его следующим образом:
new Schema({..}, { versionKey: '_somethingElse' })
__v === 0
)?
query.select('-__v')
. @ExplosionPills вам нужно будет добавить mongoose middleware, как schema.pre('save', function (next) { this.increment(); next(); })
.
Ну, я не вижу решения Тони ... поэтому я должен разобраться с этим сам ...
Если вам не нужен version_key, вы можете просто:
var UserSchema = new mongoose.Schema({
nickname: String,
reg_time: {type: Date, default: Date.now}
}, {
versionKey: false // You should be aware of the outcome after set to false
});
Установка для versionKey значения false означает, что документ больше не является версионным.
Это проблематично, если документ содержит массив вложенных документов. Один из вложенных документов можно удалить, уменьшив размер массива. Позже другая операция может получить доступ к вложенному документу в массиве в исходном положении.
Поскольку массив теперь меньше, он может случайно получить доступ к неверному поддокументу в массиве.
VersionKey решает эту проблему, связывая документ с ключом versionKey, который внутренне используется в mongoose для обеспечения доступа к нужной версии коллекции.
Дополнительную информацию можно найти по адресу: http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html.
resultFromMongo.toObject({ versionKey: false })
, чтобы уменьшить значение.
schema.set('versionKey', false);
Мы можем использовать versionKey: false в определении схемы
'use strict';
const mongoose = require('mongoose');
export class Account extends mongoose.Schema {
constructor(manager) {
var trans = {
tran_date: Date,
particulars: String,
debit: Number,
credit: Number,
balance: Number
}
super({
account_number: Number,
account_name: String,
ifsc_code: String,
password: String,
currency: String,
balance: Number,
beneficiaries: Array,
transaction: [trans]
}, {
versionKey: false // set to false then it wont create in mongodb
});
this.pre('remove', function(next) {
manager
.getModel(BENEFICIARY_MODEL)
.remove({
_id: {
$in: this.beneficiaries
}
})
.exec();
next();
});
}
}