Estou usando a Mongooseversão 3 com a MongoDBversão 2.2. Percebi que um __vcampo começou a aparecer nos meus MongoDBdocumentos. Tem algo a ver com versionamento? Como isso é usado?
A versionKeyé uma propriedade definida em cada documento quando o primeiro criado por Mongoose. Este valor de chaves contém a revisão interna do documento. O nome desta propriedade do documento é configurável. O padrão é __v.
Se isso entrar em conflito com seu aplicativo, você poderá configurar da seguinte maneira:
É seguro usar essa propriedade para determinar se um documento foi criado (por exemplo __v === 0)?
Pílulas de explosão
39
@ExplosionPills para referência futura: não. A chave de versão é incrementada apenas após operações que podem causar um conflito, modificando as posições da matriz. Outras atualizações não o incrementarão. O post de lançamento original explica isso em detalhes: aaronheckmann.tumblr.com/post/48943525537/...
Ricardo Tomasi
2
Existe uma maneira de ocultá-lo dos documentos retornados das consultas?
Diosney
6
@diosney query.select('-__v'). @ExplosionPills você precisaria adicionar o middleware mangusto schema.pre('save', function (next) { this.increment(); next(); }).
wprl
3
@talentedmrjones @wprl É exatamente o que estou fazendo agora, mas queria algo que pudesse colocar diretamente no esquema em todas as consultas.
diosney
73
Bem, eu não consigo ver a solução do Tony ... então eu mesmo tenho que lidar com isso ...
Se você não precisa do version_key, pode:
varUserSchema=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});
Definir versionKey como false significa que o documento não está mais com versão.
Isso é problemático se o documento contiver uma matriz de subdocumentos. Um dos subdocumentos pode ser excluído, reduzindo o tamanho da matriz. Posteriormente, outra operação poderia acessar o subdocumento na matriz em sua posição original.
Como a matriz agora é menor, ela pode acessar acidentalmente o subdocumento errado na matriz.
O versionKey resolve isso associando o documento ao a versionKey, usado pelo mangusto internamente para garantir que ele acesse a versão de coleção correta.
Você também pode ligar resultFromMongo.toObject({ versionKey: false }), para suprimir o valor.
Leo Gerber
@xperator, o resultado não é um campo __V no esquema: {"_id": {"$ oid": "5aa62e99f36d28237f1a41ad"}, "email": "[email protected]", "sessions": 0} vs {"_id ": { "$ oid": "5aa62e99f36d28237f1a41ad"}, "email": "[email protected]", "sessões": 0 " __v": 0}
Dang
ou issoschema.set('versionKey', false);
Stan Wiechers 06/04
1
o que vem depois de definir falso? diferente de não estar no documento?
Alguém Especial
0
Podemos usar versionKey: false na definição do esquema
'use strict';const mongoose = require('mongoose');exportclassAccount 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();});}}
Respostas:
A partir daqui :
fonte
__v === 0
)?query.select('-__v')
. @ExplosionPills você precisaria adicionar o middleware mangustoschema.pre('save', function (next) { this.increment(); next(); })
.Bem, eu não consigo ver a solução do Tony ... então eu mesmo tenho que lidar com isso ...
Se você não precisa do version_key, pode:
Definir versionKey como false significa que o documento não está mais com versão.
Isso é problemático se o documento contiver uma matriz de subdocumentos. Um dos subdocumentos pode ser excluído, reduzindo o tamanho da matriz. Posteriormente, outra operação poderia acessar o subdocumento na matriz em sua posição original.
Como a matriz agora é menor, ela pode acessar acidentalmente o subdocumento errado na matriz.
O versionKey resolve isso associando o documento ao a versionKey, usado pelo mangusto internamente para garantir que ele acesse a versão de coleção correta.
Mais informações podem ser encontradas em: http://aaronheckmann.blogspot.com/2012/06/mongoose-v3-part-1-versioning.html
fonte
resultFromMongo.toObject({ versionKey: false })
, para suprimir o valor.schema.set('versionKey', false);
Podemos usar versionKey: false na definição do esquema
fonte