web-dev-qa-db-fra.com

Les champs virtuels Mongoose inclus dans toJSON par défaut: schemaOptions.toJSON.virtuals = true; n'inclut toujours pas les champs virtuels par défaut

J'ai vu dans une autre réponse que pour inclure les champs virtuels, vous devez faire comme https://groups.google.com/forum/?fromgroups#!topic/mongoose-orm/HjrPAP_WXYs

var schemaOptions = {
  toJSON: {
    virtuals: true
  }
};

ce que j'ai fait;

Maintenant dans le schéma:

 new Schema({...}, schemaOptions);

Mais toujours ainsi, les données n'incluent pas le virtuel ..: s

Mais comme ça marche:

var docsCallback = function(err, docs){
    var i = docs.length;
    var nDocs = [];
    while(i--){
        nDocs[i] = docs[i].toObject({virtuals: true});
    }
    done(nDocs);
}
31
Totty.js

Juste essayé:

  var schemaOptions = {
    toObject: {
      virtuals: true
    }
  };

et a travaillé! ;)

Maintenant, par défaut, j'utilise:

  var schemaOptions = {
    toObject: {
      virtuals: true
    }
    ,toJSON: {
      virtuals: true
    }
  };
52
Totty.js

Vous pouvez faire de cette façon aussi:

docs.set('toJSON', { virtuals: true });
11
Amol M Kulkarni

Pour moi, cela n’a fonctionné qu’après l’ajout de getters: true aux options du schéma, comme indiqué dans mongoose docs , i.e.

var schemaOptions = { toObject: { getters: true }, toJSON: { getters: true } };

0
Yair