Estoy usando mongoose para consultar una base de datos local y lo he intentado: (Suponga que cardName está definido)
const card = await Card.findOne({ name: cardName }, 'name art description')
const card = await Card.findOne({ name: cardName }, { name: 1,art: 1,description: 1 })
const card = await Card.findOne({ name: cardName }).project('name art description')
const card = await Card.findOne({ name: cardName }, 'name art description').exec()
Aunque obtengo los campos que especifico, también obtengo otros campos innecesarios, como
$__schema: [object Object] collection: [object Object] $collection: [object Object] $__originalValidate: function(pathsToValidate, options, callback) { if (typeof pathsToValid . . . $__save: function() { var _context = context || this; _this.wrap(name, fn, _context, Array.from(arguments), options); } $__validate: function() { var _context = context || this; _this.wrap(name, fn, _context, Array.from(arguments), options); } $__remove: function() { var _context = context || this; _this.wrap(name, fn, _context, Array.from(arguments), options); } $__deleteOne: function() { process.nextTick(() => fn.apply(this, arguments)); } $__init: function syncWrapper() { kareem.execPreSync(name, this, arguments); var toReturn = fn.apply(this, arguments); kareem.execPostSync(name, this, [toReturn]); return toReturn; } $isMongooseModelPrototype: true $__handleSave: function(options, callback) . . .¿Cómo me aseguro de obtener solo los campos que especifico y NO la información innecesaria?
Puede usar la función lean() en su consulta. De los documentos:
Los documentos devueltos por consultas con la opción Lean habilitada son objetos simples de JavaScript, no documentos Mongoose. No tienen método de guardado, getters/setters, virtuales u otras características de Mongoose.
const docs = await Model.find().lean();